上篇文章中通过代码方式,重点讲解了:
- __new__和__init__之间的关系,前者是用来创建类实例,后者用来初始化类实例,它两配合使用,才完整生成一个类实例。
- object和type之间的关系,前者负责继承这块工作,后者负责类型定义这块工作。即所有的对象都起源于object,所有的对象最终都是type这个类型。
本文将重点介绍元类和元类的创建。
1.什么是元类
元类是创建类的类。如何理解这句话,先看以下代码:
class B():
pass
b=B()
print(b.__class__)
print(B.__class__)
print(object.__class__)
#打印情况:
<class '__main__.B'>
<class 'type'>
<class 'type'>
上述代码中b是由类B构建的,因此b的类型(通过__class__属性查看)是<class ‘main.B’>,而后面B和object的类型都是type,同理,这说明B和object都是由type这个类创建的,即type可以用来创建类。
能够创建类的类,我们称作元类,type就是最原始的一个元类。
2.type如何创建类
首先声明:type在python中有两个身份:
1.type当做函数用,同__class__属性作用相同,返回对象的类型