考虑以下代码:
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
甚至基类名称,但显然我找不到在基类中调用类方法的方法。
在上面的例子中,Base.do(a)
打印 Base
类而不是 Derived
类。
最佳答案
如果您使用的是新样式类(即从 Python 2 中的 object
派生,或者始终在 Python 3 中),您可以使用 super()
像这样:
super(Derived, cls).do(a)
这就是在设置了 cls
的情况下从派生类调用基类方法版本(即 print cls, a
)中的代码的方式到派生类。
关于python - 在 Python 中调用基类的类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1269217/