元类在class语句执行完之后自动执行。
元类的主要工作: 通过声明一个元类,我们告诉python路由类对象的创建到我们提供的另一个类。
有人使用元类实现面向切面编程和ORM?
元类模型
类是type的实例。
- 在3.x里,用户定义的类对象是type对象的实例,type对象自身也是一个类
- 在2.6里,新式类继承自object,object是type的子类。传统类是type的实例,但是不是从类中创建出来的。
|
|
元类是type的子类
元类是type的子类,类是type的实例,所以我们可以通过定制化元类来定制化类。
class声明协议
class声明协议: 在class语句执行完之后,在执行完所有内嵌代码后,会调用type对象来创建class对象。
|
|
type对象定义了一个__call__方法,该方法运行两个其他的方法。
|
|
__new__方法创建和返回新的class对象。__init__初始化新创建的class对象。
举个例子:
|
|
声明元类
|
|
python中的高级功能
自省属性: __class__ __dict__
运算符重载方法: __str__ __add__等
属性拦截方法: __getattr__ __setattr__ __getattribute__
类property和类descriptor
函数和类装饰器
元类