在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')