2010-05-13 14 views
28

這個問題是建立在許多假設之上的。如果一個假設是錯誤的,那麼整個事情就會崩潰。我對Python還比較陌生,剛進入好奇/探索階段。Python 3.x中的最終課程Guido沒有告訴我什麼?

我的理解是Python不支持創建不能被分類的類(final類)。但是,在我看來,Python中的類不能被繼承。當考慮到bool類的意圖時,這是有意義的(因爲bool只應該有兩個值:true和false),我對此很滿意。我想知道的是如何這個班級被標記爲final。

所以我的問題是:圭多如何設法防止布爾的子類化?

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

你可以很容易地模擬從Python 3.x都有同樣的效果:

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 

會給下面的輸出:

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 
相關問題