2010-05-13 9 views
28

यह प्रश्न कई मान्यताओं के शीर्ष पर बनाया गया है। यदि एक धारणा गलत है, तो पूरी बात खत्म हो जाती है। मैं अभी भी पाइथन के लिए अपेक्षाकृत नया हूं और अभी उत्सुक/अन्वेषण चरण में प्रवेश कर चुका हूं।पायथन 3.x में अंतिम कक्षाएं- कुछ Guido मुझे नहीं बता रहा है?

यह मेरी समझ है कि पायथन उन वर्गों के निर्माण का समर्थन नहीं करता है जिन्हें उप-वर्गीकृत नहीं किया जा सकता है (अंतिम कक्षाएं)। हालांकि, मुझे लगता है कि बूल पायथन में कक्षा को उपclassed नहीं किया जा सकता है। यह समझ में आता है जब बूल क्लास के इरादे पर विचार किया जाता है (क्योंकि बूल केवल दो मान होना चाहिए: सत्य और गलत), और मैं इससे खुश हूं। मैं क्या जानना चाहता हूं कैसे इस वर्ग को अंतिम के रूप में चिह्नित किया गया था।

तो मेरा प्रश्न है: गिडो ने बूल के सबक्लासिंग को रोकने के लिए वास्तव में कैसे प्रबंधन किया?

>>> class TestClass(bool): 
     pass 

Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    class TestClass(bool): 
TypeError: type 'bool' is not an acceptable base type 

संबंधित प्रश्न:Why I can't extend bool in Python?

उत्तर

40

आप काफी आसानी से अजगर 3.x से ही प्रभाव अनुकरण कर सकते हैं:

Traceback (most recent call last): 
    File "C:\Temp\final.py", line 10, in <module> 
    class D(C): pass 
    File "C:\Temp\final.py", line 5, in __new__ 
    raise TypeError("type '{0}' is not an acceptable base type".format(b.__name__)) 
TypeError: type 'C' is not an acceptable base type 
11

आप केवल सी एपीआई के माध्यम से ऐसा कर सकता है। टाइप ऑब्जेक्ट के tp_flags के Py_TPFLAGS_BASETYPE बिट साफ़ करें।

इस तरह: http://svn.python.org/projects/python/trunk/Objects/boolobject.c (बनाम intobject.c जहां Py_TPFLAGS_BASETYPE सेट है)।

+0

प्रलेखन के लिए लिंक:: http://docs.python.org

class Final(type): def __new__(cls, name, bases, classdict): for b in bases: if isinstance(b, Final): raise TypeError("type '{0}' is not an acceptable base type".format(b.__name__)) return type.__new__(cls, name, bases, dict(classdict)) class C(metaclass=Final): pass class D(C): pass 

निम्नलिखित उत्पादन दे देंगे /c-api/typeobj.html#Py_TPFLAGS_BASETYPE –

संबंधित मुद्दे