2012-06-07 35 views
10

Ví dụ, tôi có một lớp cơ sở và lớp dẫn xuất:Một python @classmethod có thể được kế thừa không?

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

Có thể có lớp Derived có thể gọi myClassMethod mà không ghi đè lên nó và gọi phương thức lớp siêu không? Tôi muốn ghi đè lên phương thức lớp chỉ khi cần thiết.

+6

lớp 'Derived' của bạn không có nguồn gốc từ' Base'. Nếu không, điều này sẽ làm việc. –

Trả lời

17

Vâng, họ có thể được thừa hưởng.

Nếu bạn muốn kế thừa thành viên, bạn cần phải nói với python về thừa kế!

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

Đó là thực hành tốt để làm cho kế thừa Base lớp học của bạn từ đối tượng (nhưng nó sẽ làm việc mà không có em làm như vậy):

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

Đây chỉ là thực hành tốt trong python 2.x - trong 3.x nó là thừa như tất cả mọi thứ thừa hưởng từ 'đối tượng'. – James

+5

@ James: đúng, nhưng hầu hết các câu hỏi về SO vẫn còn khoảng 2.7 – Eric

+1

Điều gì sẽ xảy ra nếu sau vài năm, nó đã ngừng hoạt động? – Daerdemandt

3

Bạn phải xác định lớp cơ sở trong lớp con:

class Derived(Base): 
    ... 
Các vấn đề liên quan