天天看點

Python中object,type,class類的關系

引言

object, type, class(使用者自定義的類)三者的關系如圖所示,下文将對該圖進行解釋:

Python中object,type,class類的關系

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()
           
Python中object,type,class類的關系

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,晚安!

繼續閱讀