在Python中调用基类的classmethod
考虑下面的代码:
class Base(object): @classmethod def do(cls, a): print cls, a class Derived(Base): @classmethod def do(cls, a): print 'In derived!' # Base.do(cls, a) -- can't pass `cls` Base.do(a) if __name__ == '__main__': d = Derived() d.do('hello') > $ python play.py > In derived! > <class '__main__.Base'> msg
从Derived.do
,我如何调用Base.do
?
如果这是一个普通的对象方法,我通常会直接使用super
或甚至基类名称,但显然我找不到一种方法来调用基类中的classmethod。
在上面的例子中, Base.do(a)
打印Base
类而不是Derived
类。
super(Derived, cls).do(a)
编辑 :哦,等一下…目前还不清楚你在问什么。 这就是如何从派生类中调用基类的方法版本中的代码。
这已经有一段时间了,但我想我可能find了答案。 当你装饰一个方法成为一个classmethod时,原来的unbound方法被存储在名为'im_func'的属性中:
class Base(object): @classmethod def do(cls, a): print cls, a class Derived(Base): @classmethod def do(cls, a): print 'In derived!' # Base.do(cls, a) -- can't pass `cls` Base.do.im_func(cls, a) if __name__ == '__main__': d = Derived() d.do('hello')
这适用于我:
Base.do('hi')