在python中,一切皆對象,應該怎麼了解呢??
先來看幾個例子:
[root@localhost ~]# python3
Python 3.6.3rc1 (default, Feb 26 2018, 22:34:25)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 1 # 定義一個變量,值為1
>>> type(a) # 檢視變量a的類型,可以看出變量a是由int類執行個體而來
<class 'int'>
>>> type(1) # 檢視整數1的類型,結果也是由int類執行個體而來
<class 'int'>
>>> type(int) # 檢視int類的類型,得出結論:int類型是由type類執行個體化而來
<class 'type'>
>>>
>>> str1 = 'aa' # 定義一個變量,值為'aa'字元串
>>> type(str1) # 檢視變量str1的類型,可以看出變量str1是由str類執行個體而來
<class 'str'>
>>> type('aa') # 檢視'aa'字元串的類型,結果也是由str類執行個體而來
<class 'str'>
>>> type(str) # 檢視str類的類型,得出結論:str類型是由type類執行個體化而來
<class 'type'>
>>>
>>> class Goods: # 自定義一個Goods商品類
... pass
...
>>> good1 = Goods() # 執行個體化Goods類,得到執行個體化對象good1
>>> type(good1) # 檢視good1的類型,可以看到是由Goods類執行個體化出來的
<class '__main__.Goods'>
>>> type(Goods) # 檢視Goods類的類型,得出結論:Goods類是由type類執行個體化而來的
<class 'type'>
同理,我們也可以使用type方法檢視list,tuple,dict,set等資料類型的類型,這些資料類型都是由type類執行個體化來的
>>> type(list)
<class 'type'>
>>> type(tuple)
<class 'type'>
>>> type(dict)
<class 'type'>
>>> type(set)
<class 'type'>
是以,可以得出結論:
在python3中,所有資料類型的變量都是由對應的類來建立的,而建立資料類型的類都是由type類執行個體化得到是以,python中所有的資料類型都是type類執行個體化來的
在上面的例子裡,定義一個Goods類,然後根據Goods類執行個體化good1對象
>>> Goods.__bases__ # 檢視Goods類的基類,結果為object類
(<class 'object'>,)
>>> class TestGoods(Goods): # 再定義一個TestGoods類,繼承Goods類
... pass
...
>>> TestGoods.__bases__ # 檢視TestGoods類的基類,結果顯示為Goods類
(<class '__main__.Goods'>,)
是以,在定義類時,如果未指定類所繼承的父類,其基類都是object
從上面的例子知道,所有資料類型的變量都是由對應的類來建立的
>>> int.__bases__ # 檢視int類的基類,結果為int類是繼承自object類的
(<class 'object'>,)
>>> str.__bases__ # 檢視str類的基類,結果為str類是繼承自object類的
(<class 'object'>,)
>>> tuple.__bases__ # 檢視tuple類的基類,結果為tuple類是繼承自object類的
(<class 'object'>,)
>>> list.__bases__ # 檢視list類的基類,結果為list類是繼承自object類的
(<class 'object'>,)
>>> dict.__bases__ # 檢視dict類的基類,結果為dict類是繼承自object類的
(<class 'object'>,)
>>> set.__bases__ # 檢視set類的基類,結果為set類是繼承自object類的
(<class 'object'>,)
是以,object是最頂層基類
通過檢視python源碼,也可以驗證這個結論

在前面,已經知道,python所有資料類型的類型都是由type類執行個體化得到的,那麼type類又是由什麼執行個體化而來,type類的基類又是什麼呢
>>> type(type) # 檢視type的類型,結果也是type類
<class 'type'>
>>> type.__bases__ # 檢視type的基類,結果為object
(<class 'object'>,)
通過檢視源碼,可以看到type類是繼承自object的
由此可以知道,type是一個類,同時type也是一個對象
object類是所有類的基類,object類的基類又是什麼呢??
>>> type(object) # 檢視object的類型,結果為object類也是由type類執行個體化而來
<class 'type'>
>>> object.__bases__ # 檢視object的基類,結果為object類的基類為空
()
綜上所述,object與type和class的關系如下圖所示