Python 為什麼要繼承 object 類?

2021-10-07 20:56:46 字數 861 閱讀 4466

繼承 object 類的是新式類,不繼承 object 類的是經典類,在 python 2.7 裡面新式類和經典類在多繼承方面會有差異:

classa:

deffoo

(self)

:print

('called a.foo()'

)class

b(a)

:pass

class

c(a)

:def

foo(self)

:print

('called c.foo()'

)class

d(b, c)

:pass

if __name__ ==

'__main__'

: d = d(

) d.foo(

)

b、c 是 a 的子類,d 多繼承了 b、c 兩個類,其中 c 重寫了 a 中的 foo() 方法。如果 a 是經典類(如上**),當呼叫 d 的例項的 foo() 方法時,python 會按照深度優先的方法去搜尋 foo() ,路徑是 b-a-c ,執行的是 a 中的 foo() ;如果 a 是新式類,當呼叫 d 的例項的 foo() 方法時,python 會按照廣度優先的方法去搜尋 foo() ,路徑是 b-c-a ,執行的是 c 中的 foo() 。因為 d 是直接繼承 c 的,從邏輯上說,執行 c 中的 foo() 更加合理,因此新式類對多繼承的處理更為合乎邏輯。在 python 3.x 中的新式類貌似已經相容了經典類,無論 a 是否繼承 object 類, d 例項中的 foo() 都會執行 c 中的 foo() 。但是在 python 2.7 中這種差異仍然存在,因此還是推薦使用新式類,要繼承 object 類。

Python 為什麼要繼承 object 類?

寫東西的時候剛好遇到這個問題,回答一波 繼承 object 類的是新式類,不繼承 object 類的是經典類,在 python 2.7 裡面新式類和經典類在多繼承方面會有差異 classa deffoo self print called a.foo classb a pass classc a d...

為什麼要繼承Serializable

最重要的兩個原因是 1 將物件的狀態儲存在儲存 中以便可以在以後重新建立出完全相同的副本 2 按值將物件從乙個應用程式域傳送至另乙個應用程式域。實現serializable介面的作用是就是可以把物件存到位元組流,然後可以恢復。所以你想如果你的物件沒實現序列化怎麼才能進行網路傳輸呢,要網路傳輸就得轉為...

python中為什麼要繼承object類

這裡先列出一段簡短的 coding utf 8 author zhengtong class person object name zhengtong if name main x person 通過這段 當我們例項化person 這個類的時候,那x就是乙個例項物件,整個過程python除了建立pe...