2012-06-07 4 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

हाँ, वे विरासत में मिला जा सकता है।

यदि आप सदस्यों का उत्तराधिकारी बनाना चाहते हैं, तो आपको विरासत के बारे में पाइथन बताना होगा!

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

यह वस्तु से अपने Base वर्ग इनहेरिट बनाने के लिए अच्छा व्यवहार है (लेकिन यह आप ऐसा करने के बिना काम करेंगे):

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

यह अजगर 2.x में 3.x में केवल एक अच्छा अभ्यास है - 3.x में यह सबकुछ अनिवार्य है क्योंकि सब कुछ 'ऑब्जेक्ट' से प्राप्त होता है। – James

+5

@ जेम्स: सच है, लेकिन SO पर अधिकतर प्रश्न अभी भी लगभग 2.7 – Eric

+1

क्या हैं यदि कई सालों बाद यह बंद हो गया? – Daerdemandt

3

आप उपवर्ग में आधार वर्ग को परिभाषित करना होगा:

class Derived(Base): 
    ... 
संबंधित मुद्दे