参考: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()type ( ,)
- 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( ,)dict ( ,)tuple ( ,)
- list, dict和tuple都属于type类 class ‘type’
- 父类都是object类 class ‘object’
比较一个实例化的list:
a = [1, 2]print(a.__class__)print(a.__bases__)输出:---------------------------------------------------------------------------AttributeError Traceback (most recent call last) in () 1 a = [1, 2] 2 print(a.__class__)----> 3 print(a.__bases__)AttributeError: 'list' object has no attribute '__bases__'
- 实例化的list它的类型是
class MyClass: passprint('MyClass', MyClass.__class__, MyClass.__bases__)print('*'*50)print('MyClass Obj', MyClass().__class__)print('MyClass Obj', MyClass().__bases__)输出:MyClass( ,)**************************************************MyClass Obj ---------------------------------------------------------------------------AttributeError Traceback (most recent call last) in () 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): passprint('MyMetaClass', MyMetaClass.__class__, MyMetaClass.__bases__)输出:MyMetaClass( ,)
- 元类本身属于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