在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的關系如下圖所示

