Python中所有東西都是對象,比較特殊的是:object和type是python中的兩個源對象,它們是互相依賴對方來定義,不能分割來說,就如同讨論“先有雞還是現有蛋”,一樣讓人蛋疼。
先介紹有兩個黑魔法在後面要用到:
obj.__bases__ 指這個對象的父類,就是說從誰繼承來的。
obj.__class__ 指這個對象的類型,類的類型是type
Python的面向對象系統有兩條線索。
1.繼承關系也就是父類和子類的關系(the subclass-superclass relationship),以object為起點;
所有對象的父類是object,是以object是沒有父類的。
>>> object.__bases__
()
type也是object的子類
>>> issubclass(type, object)
True
>>> type.__bases__
(<class 'object'>,)
2.類型和執行個體之間的關系( the type-instance relationship ),以type為起點。
type是自身的執行個體,或說type(對象object)的class(類型type)是type
>>> isinstance(type, type)
True
>>> type(type)
<class 'type'>
>>> type.__class__
<class 'type'>
就連object都是type的執行個體
>>> isinstance(object, type)
True
最後總結一下:
type是一個比較特殊的類,這裡引出另一概念元類,普通類執行個體化出來一個對象,但是元類執行個體化出來的是一個類,
int、float、str、boolean、tuple、dict、set等内置的資料類型其實也就是内置的類都是type執行個體。
>>> isinstance(int, type)
True
>>> int.__class__
<class 'type'>
>>>
object是所有對象(包括類對象)的父類,int、float、str、boolean、tuple、dict、set内置類都是object子類。
>>> int.__bases__
(<class 'object'>,)
>>> issubclass(int, object)
True