【发布时间】:2011-01-30 21:16:46
【问题描述】:
我有一个装饰函数(简化版):
class Memoize:
def __init__(self, function):
self.function = function
self.memoized = {}
def __call__(self, *args, **kwds):
hash = args
try:
return self.memoized[hash]
except KeyError:
self.memoized[hash] = self.function(*args)
return self.memoized[hash]
@Memoize
def _DrawPlot(self, options):
do something...
现在我想将此方法添加到预先存在的类中。
ROOT.TChain.DrawPlot = _DrawPlot
当我调用这个方法时:
chain = TChain()
chain.DrawPlot(opts)
我明白了:
self.memoized[hash] = self.function(*args)
TypeError: _DrawPlot() takes exactly 2 arguments (1 given)
为什么不自我传播?
【问题讨论】:
-
总是从
object继承而不是什么都没有,这样你就可以使用新样式的类了。 -
如果您有任何选择,请不要使用首字母大写的方法命名。使用
_draw_plot(PEP 8 推荐)或_drawPlot之类的名称。 -
我的回答具有误导性,所以它得到了印章。感谢迈克的反馈!
标签: python class decorator descriptor