2012-06-07 119 views
10

例如,我有一个基类和派生类:可以继承python @classmethod吗?

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

是否有可能有派生类能够调用myClassMethod没有覆盖它并调用超类的类的方法?我只想在必要时覆盖类方法。

+6

你'Derived'类不是从'Base'的。否则这将工作。 –

回答

17

是的,他们可以继承。

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

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

这是很好的做法,让您的Base类继承的对象(但它没有你这样做的工作):

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

这只是python 2.x中的一个好习惯 - 在3.x中它是多余的,因为一切都从'object'继承。 – James

+5

@詹姆斯:没错,但是SO上的大多数问题仍然是大约2.7 – Eric

+1

如果几年后它不再如此了? – Daerdemandt

3

您必须在子类中定义的基类:

class Derived(Base): 
    ...