什么是元类
- 在python中一切皆对象,那么我们用class关键字定义的类本身也是一个对象,负责产生该对象的类称之为元类,即元类可以简称为类的类
为什么用元类
元类是负责产生类的,所以我们学习元类或自定义类的目的:是为了控制类的产生过程,还可以控制对象的产生过程
class创建类
- 如果说类也是对象,那么用class关键字的去创建类的过程也是一个实例化的过程,该实例化的目的是为了得到一个类,调用的是元类
- 用class关键字创建一个类,用的默认的元类type,因此以前说不要用type作为类别判断
-
type实现
-
自定义元类
分析用class自定义类的运行原理(而非元类的的运行原理):
- 拿到一个字符串格式的类名class_name='People'
- 拿到一个类的基类们class_bases=(obejct,)
- 执行类体代码,拿到一个类的名称空间class_dic={...}
- 调用People=type(class_name,class_bases,class_dic)
- 自定义元类控制类的产生过程,类的产生过程其实就是元类的调用过程
属性查找顺序
查找顺序:
- 先对象层:OldoyTeacher->Foo->Bar->object
- 然后元类层:Mymeta->type