參考:https://blog.csdn.net/andybegin/article/details/80775773
學習python的同學都知道這么幾句話:
1. object類是所有新式類的父類
2. type是所有類的類
那么type和object是什么關系呢?
object是一個新式類,我們可以通過object.class和object.bases來獲取object所屬的類和他的父類。
首先比較object和type:
print('object', object.__class__, object.__bases__)
print('type', type.__class__, type.__bases__)
輸出:
object <class 'type'> ()
type <class 'type'> (<class 'object'>,)
- object和type都屬於 type類 class ‘type’。
- object的父類為空,說明它沒有繼承任何類。
- type的父類為 object類 class ‘object’。
然后比較list, dict和tuple:
print('list', list.__class__, list.__bases__)
print('dict', dict.__class__, dict.__bases__)
print('tuple', tuple.__class__, tuple.__bases__)
輸出:
list <class 'type'> (<class 'object'>,)
dict <class 'type'> (<class 'object'>,)
tuple <class 'type'> (<class 'object'>,)
- list, dict和tuple都屬於type類 class ‘type’
- 父類都是object類 class ‘object’
比較一個實例化的list:
a = [1, 2]
print(a.__class__)
print(a.__bases__)
輸出:
<class 'list'>
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-149-3008ef49a253> in <module>()
1 a = [1, 2]
2 print(a.__class__)
----> 3 print(a.__bases__)
AttributeError: 'list' object has no attribute '__bases__'
- 實例化的list它的類型是
class MyClass:
pass
print('MyClass', MyClass.__class__, MyClass.__bases__)
print('*'*50)
print('MyClass Obj', MyClass().__class__)
print('MyClass Obj', MyClass().__bases__)
輸出:
MyClass <class 'type'> (<class 'object'>,)
**************************************************
MyClass Obj <class '__main__.MyClass'>
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-155-1ed1608465fe> in <module>()
4 print('*'*50)
5 print('MyClass Obj', MyClass().__class__)
----> 6 print('MyClass Obj', MyClass().__bases__)
AttributeError: 'MyClass' object has no attribute '__bases__'
- 自定義類本身屬於type類 class ‘type’ ,並且父類是object類 class ‘object’
- 自定義類的實例化的對象屬於類本身,並且對象不存在父類屬性
比較自定義元類:
class MyMetaClass(type):
pass
print('MyMetaClass', MyMetaClass.__class__, MyMetaClass.__bases__)
輸出:
MyMetaClass <class 'type'> (<class 'type'>,)
- 元類本身屬於type類 class ‘type’ ,並且父類也是type類 class ‘type’。
總結一下:
type元類的類則是由type元類自身創建的。object類是由元類type創建的,但是type類又繼承了object類。
圖示:虛線表示源是目標的實例,實線表示源是目標的子類

參考:https://blog.csdn.net/piglite/article/details/78294112
參考2:https://blog.csdn.net/zhaohaibo_/article/details/80642631
