2011-09-05 216 views
7

在我過去的一個問題中,回答者告訴我,當你想創建的類是從頭開始的時候,最好從對象繼承,而不需要從其他類繼承。爲什麼繼承對象類型

例如,像什麼我總是這樣:

class my_class: 
    "a class inherits from nothing" 
    def __init__(self): 
     pass 

對於他或她建議:

class suggested_class(object): 
    "a class inherits from object type" 
    def __init__(self): 
     pass 

我很困惑與這兩種方法的優點或缺點。

問題1:

那麼,什麼是你的想法,從對象類型或沒有繼承?

+2

請參閱http://docs.python.org/release/2.2.3/whatsnew/sect-rellinks.html#SECTION000310000000000000000 – wim

+0

正如Marcello提到的,如果您有兩個問題,請將此帖子限制爲單個問題,並且[發佈另一個問題](http://stackoverflow.com/questions/ask)。 – SingleNegationElimination

+0

你可以看看'dir(my_class)'和'dir(suggested_class)'。此外,如下所述,在Python3中兩者都是相同的。 – steabert

回答

5

從nothing繼承將創建一箇舊式類,它具有與新式類不同的行爲。我不記得剛纔的具體細節(參見here的解釋),但作爲一般規則,沒有理由支持舊式類,所以您應該始終從對象繼承(如果沒有其他)。

+4

有新風格類的原因是1:舊風格類的所有實例的類型是'classobj',這不是很有趣,2:老風格類的方法解析順序被打破了多重繼承。解決這些問題中的一個或兩個會導致很多現有的代碼停止工作,所以最簡單的做法是創建一個不同類的類,因此是'object'。 – SingleNegationElimination

+1

@Token另外,在Python 3中,所有的類都回歸到新的風格,而沒有專門從'object'繼承。 – Keith

+0

那麼,老式的課程被打破了,py3故意打破了後面的兼容性,所以這是一個跳躍的好時機。 – SingleNegationElimination