2012-06-07 3 views
10

, 나는 기본 클래스와 파생 클래스가 :파이썬 @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

이것은 파이썬 2.x에서 좋은 습관입니다 - 3.x에서는 모든 것이'object'에서 상속되므로 불필요합니다. – James

+5

@James : 사실이지만, SO에 관한 대부분의 질문은 여전히 ​​약 2.7 – Eric

+1

몇 년이 지나면 어떻게 될까요? – Daerdemandt

3

당신은 하위 클래스에서 기본 클래스를 정의해야합니다 :

class Derived(Base): 
    ... 
관련 문제