引言
object, type, class(使用者自定義的類)三者的關系如圖所示,下文将對該圖進行解釋:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPR9EMJRVT4VFRNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2ATO3ATO0QDMyATOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
1. 為什麼說Python中一切皆對象
上圖描述了Python中類和對象的關系,實際上Python中的類是類對象,本質上它也是一個對象。其中type函數是由type類執行個體化得到的,type類對象是由type函數生成的,class(使用者自定義)類對象和object類對象也是由type函數生成的。
class A():
pass
print(type.__class__) # 生成type類對象的類
print(object.__class__) # 生成object類對象的類
print(A.__class__) # 生成A類對象的類
a = 1
print(int.__class__) # 生成int類對象的類,該類和type,object都是由type對象生成
print(a.__class__) # 生成a的類
輸出為:
<class 'type'>
<class 'type'>
<class 'type'>
<class 'type'>
<class 'int'>
可知,type函數本身就屬于一個對象。object, type, class(使用者自定義)均為類對象,由type函數生成,可類比于對象a是由int函數生成。object, type, class(使用者自定義的類)類執行個體化後生成其他對象,是以,在Python中一切皆對象。
注:在Python系統中object和class可以被執行個體化,type執行個體化會報錯,因為系統預設type為type函數。
# 使用者自定義類和object類可以成功執行個體化
class A():
pass
a = A()
b = object()
2. 繼承關系
Python中的類有object, type, class(使用者自定義的類)三種,object是所有類的父類,并且object沒有父類,type和class(使用者自定義類)繼承了object類。
class A():
pass
print(object.__bases__)
print(type.__bases__)
print(A.__bases__)
輸出為
()
(<class 'object'>,)
(<class 'object'>,)
查了一晚的資料加整理,淩晨4:57,晚安!