python3中的type與object


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM