from datetime import datetime
import time
class Base(object):
def __init__(self):
pass
def storeResult(self, function_name, result, executed_time= None):
pass # store result in nested dictinary
class Derived(Base):
def __init__(self):
pass
def sum(self, a, b):
print 'In derived!'
a = 0
b = 0
result = a + b
super(Base, self).storeResult("sum", result, str(datetime.now())) # Don't want to pass string,Is there any pythonic way of passing function name
def diff(self, a, b):
print 'In derived!'
result = a - b
super(Base, self).storeResult("diff", result, str(datetime.now())) # Don't want to pass string, Is there any pythonic way of passing function name
def multiply(self, a, b):
print 'In derived!'
a = 0
b = 0
result = a * b
super(Base, self).storeResult("multiply", result, str(datetime.now())) # Don't want to pass string, Is there any pythonic way of passing function name
def divide(self, a, b):
print 'In derived!'
a = 0
b = 0
result = a / b
super(Base, self).storeResult("divide", result, str(datetime.now())) # Don't want to pass string, Is there any pythonic way of passing function name
if __name__ == '__main__':
d = Derived()
d.sum(1,2)
d.diff(2,1)
d.multiply(1,2)
d.divide(10,5)
d.sum(1,12)
d.diff(12,1)
d.multiply(11,2)
d.divide(10,15)
d.sum(11,12)
d.diff(12,1)
d.multiply(11,2)
d.divide(110,5)
我面临以下问题:
1)我想从子类中调用父类方法:第79行,以总和:: super(Base,self).storeResult(“ sum”,result,str(datetime.now()))AttributeError:'super'对象没有属性“ storeResult”
2)如何将子类的函数名称作为参数以pythonic方式传递给父类方法?
3)我想确保在派生类的每个函数调用之后,将每个结果,函数名称和执行时间存储在基类storeResult中,例如{function:{result:time}}。
我对python有点陌生,在此先感谢。
使用装饰器函数将包装被调用的方法。
from collections import defaultdict
from datetime import datetime
from functools import wraps
def store_result(method):
@wraps(method)
def wrapped(self, *args, **kwargs):
result = method(self, *args, **kwargs)
self.storeResult(method.__name__, result, str(datetime.now()))
return result
return wrapped
class Base(object):
def __init__(self):
self.results = defaultdict(dict)
def storeResult(self, function_name, result, executed_time= None):
self.results[function_name][result] = executed_time
class Derived(Base):
@store_result
def sum(self, a, b):
print 'In derived!'
a = 0
b = 0
return a + b
@store_result
def diff(self, a, b):
print 'In derived!'
return a - b
@store_result
def multiply(self, a, b):
print 'In derived!'
a = 0
b = 0
return a * b
@store_result
def divide(self, a, b):
print 'In derived!'
a = 0
b = 0
return a / b
我已用于defaultdict
存储结果-它允许在分配值时传递缺少键的工厂函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句