【Python學習一】如何理解一切皆對象?

一切皆對象?

學過Java都知道,Java中有8個基本類型,其餘的都是繼承自Object類的引用類型。方法內的基本類型變量會在棧上分配,而引用類型會通過逃逸分析來決定在棧上分配或堆上分配。Java中關於類和對象是針對引用類型而言的。

但在Python中,OO的思想被徹底的實現了——Python中一切皆對象。這樣就意味着,不論是int,str,還是dict,list,再或者是自己定義的類,實例化出來都是一個對象。這是Python與Java很大的不同。

然而光是這一點不足以說明“一切皆對象”,爲什麼這麼說?因爲Python中函數、類、類型等等也都是對象。我們知道Python是動態類型語言,雖然不用聲明類型,但是每個對象都隱藏着一個固定的類型(可以通過type(obj)查看),而這個類型也是一個對象。

這就厲害了,Java的動態特性的實現時基於可以通過反射技術改變內存中類的結構,而Python不必這麼複雜,由於類也是一種對象,直接修改對象就可以實現了。

有了下面這張圖可能會更好理解:
在這裏插入圖片描述
我們可以從以下三句話來理解上面這幅圖。

1“一切皆對象”

不過多解釋,上面已經提到過了。

2“一切對象都繼承自object,object自己例外”

這個和Java類似,總得有個基類,囊括一些最基本的函數及屬性,同時也方便多態的管理。
object不繼承自object也好理解,這樣的套娃是沒有意義的。

3“一切類型都是type類型的實例,沒有例外”

type本身是類型也是對象,和其他的int list str之類的並無太大區別。所以就不難理解,type也是type類型的實例。
除了這個以外還有一個環形關係,那就是type是object的子類,同時object也是type的實例。

說好的禁止套娃呢。不過Python憑藉着這樣的對象模型設計真正實現了一切皆對象的OO思想。就是這麼簡單粗暴,所以人生苦短我用Python。

圖片資源來源於視頻:https://www.bilibili.com/video/BV17p4y117N6?p=3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章