可以继承python @classmethod吗?

时间:2012-06-07 16:46:18

标签: python inheritance class-method

例如,我有一个基类和一个派生类:

>>> class Base:
...   @classmethod
...   def myClassMethod(klass):
...     pass
...
>>> class Derived:
...   pass
...
>>> Base.myClassMethod()
>>> Derived.myClassMethod()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: class Derived has no attribute 'myClassMethod'

是否有可能让Derived类能够调用myClassMethod而不会覆盖它并调用super的类方法?我只想在必要的时候覆盖类方法。

2 个答案:

答案 0 :(得分:20)

是的,它们可以被遗传。

如果你想继承成员,你需要告诉python继承!

>>> class Derived(Base):
...    pass

在Python 2中,让你的Base类继承自object是一种很好的做法(但是如果没有你这样做,它会工作)。在Python 3中,它是不必要的,因为它默认已经从对象继承(除非你试图使你的代码向后兼容):

>>> class Base(object):
...     ...

答案 1 :(得分:4)

您必须从子类中的基类派生:

class Derived(Base):
    ...