我已經使用Python了很長一段時間了,而且我還不確定爲什麼你會從object
繼承。是什麼這之間的區別:爲什麼有必要從Python中的對象繼承子類?
class MyClass():
pass
這:
class MyClass(object):
pass
據我瞭解,object
是所有類的基類和子類是隱含的。你從它的明確子類獲得任何東西嗎?什麼是最「Python」的事情?
我已經使用Python了很長一段時間了,而且我還不確定爲什麼你會從object
繼承。是什麼這之間的區別:爲什麼有必要從Python中的對象繼承子類?
class MyClass():
pass
這:
class MyClass(object):
pass
據我瞭解,object
是所有類的基類和子類是隱含的。你從它的明確子類獲得任何東西嗎?什麼是最「Python」的事情?
這是python 2.x中的oldstyle和新風格類。第二種形式是最新版本,存在於Python 2.2及以上版本。對於新代碼,您只能使用新的樣式類。
在Python 3.x中,你可以再次使用兩種形式,因爲新的風格是唯一剩下的,而且兩種形式都是真正的等價形式。不過,我相信你應該繼續使用MyClass(object)
表格,即使對於3.x代碼,至少在Python 3.x被廣泛採用以避免與用於2.x的代碼的潛在讀者之間的任何誤解。
舊樣式和新樣式類之間的行爲與使用super()等某些功能有很大不同。
在這裏看到:New Style classes
您還可以看到here上SO。
與@kriss,@Noctis和@Carson一致。從我更多的顏色:
class X: pass
和class X(): pass
是經典類而 class X(object): pass
同義詞是新式的類,你可以在這裏看到:
>>> class X:pass
...
>>> class Y(): pass
...
>>> class Z(object): pass
...
>>>
>>> type(X), type(Y), type(Z)
(<type 'classobj'>, <type 'classobj'>, <type 'type'>)
看看提供的linky @kriss瞭解更多細節。 Python 3中無效的是經典類的概念...原因是因爲經典類已被棄用。所有三種成語在任何3.x中只創建新式課程:
>>> class X:pass
...
>>> class Y(): pass
...
>>> class Z(object): pass
...
>>>
>>> type(X), type(Y), type(Z)
(<class 'type'>, <class 'type'>, <class 'type'>)
這意味着底線是什麼?如果你使用Python 2進行編碼,儘可能使用新式的類。這樣,您已經建立了遷移路徑。加上新式課程提供比傳統課程更多的功能。 (這有點主觀,但如果你的[classic]類相對簡單,那麼你可能不需要做任何事情來讓它們在Python 3中工作。)
+1個很好的例子。 – 2010-04-26 18:11:12
3.X無效 – 2010-04-26 16:57:20
@Noctis - 什麼對於3.x無效?舊式?舊的/新的區別? – phkahler 2010-04-26 17:13:28
繼承自Object的默認行爲是Python 3.x – 2010-04-26 17:17:27