पार्टी के लिए देर से लेकिन सभी अजगर तरीकों "आभासी" डिफ़ॉल्ट रूप से कर रहे हैं - पर विचार करें:
class B(object):
def __priv(self): print '__priv:', repr(self)
def call_private(self):
print self.__class__.__name__
self.__priv()
class E(B):
def __priv(self): super(E, self).__priv()
def call_my_private(self):
print self.__class__.__name__
self.__priv()
B().call_private()
E().call_private()
E().call_my_private()
चल रही है कारण नाम mangling रहे हैं:
B
__priv: <__main__.B object at 0x02050670>
E
__priv: <__main__.E object at 0x02050670>
E
Traceback (most recent call last):
File "C:/Users/MrD/.PyCharm2016.3/config/scratches/test_double__underscore", line 35, in <module>
E().call_my_private()
File "C:/Users/MrD/.PyCharm2016.3/config/scratches/test_double__underscore", line 31, in call_my_private
self.__priv()
File "C:/Users/MrD/.PyCharm2016.3/config/scratches/test_double__underscore", line 27, in __priv
def __priv(self): super(E, self).__priv()
AttributeError: 'super' object has no attribute '_E__priv'
तो तुम करना चाहते हैं भाषा से कुछ मदद प्राप्त करें ताकि लोगों को आपकी कक्षा के अंदर की कुछ कार्यक्षमता को ओवरराइड करने से मना कर दिया जा सके, यह जाने का तरीका है। यदि आप जिस विधि को अंतिम बनाना चाहते हैं वह आपके क्लास एपीआई का हिस्सा है, हालांकि आप टिप्पणी दृष्टिकोण (या मेटाक्लास हैक्स) से फंस गए हैं।मेरी व्यक्तिगत राय यह है कि अंतिम कीवर्ड विरासत के लिए बहुत उपयोगी है - क्योंकि आप ओवरराइड होने पर कपटी तरीके से तोड़ने से बच सकते हैं (उदाहरण के लिए सुपर कार्यान्वयन में "अंतिम" विधि का उपयोग करने पर विचार करें और फिर कोई ओवरराइड करता है - बूम, सुपर टूटा हुआ) - और प्रलेखन प्रयोजनों के लिए (कोई डॉक्स एक संकलन समय सिंटैक्स त्रुटि की तुलना में बेहतर कर रहे हैं) - लेकिन पायथन के गतिशील स्वभाव यह और हैक्स नाजुक होते हैं की अनुमति नहीं होगी - तो एक docstring जोड़ें:
"""DON'T OVERRIDE THIS METHOD"""
स्रोत
2017-02-06 23:27:33
आप ऐसी बात क्यों चाहिए? क्या आपको डर है कि कोई इसे ओवरराइड करेगा और यह उनके लिए काम नहीं करेगा? यह उनकी समस्या है। लेकिन कभी-कभी, वे जानते हैं कि वे क्या कर रहे हैं और उन्हें बस ऐसा करने की ज़रूरत है। मैंने जावा में इस तरह की सीमा के तीन दिन कामकाज बिताया है, पाइथन में यह 20 सेकंड था। – Pablo