一、元类是什么?
定义理解:
- Python中一切皆为对象,对象是有类实例化生成;
- 类也是对象(类对象),生成类对象的类可称之为元类;
- 所以,元类就是来创建类对象的,可称之为类工厂;
- type是python内建元类,type是最上层的元类,也可称为一切类对象的元类;
常见对象如str, int等,其__class__属性都是type,class 的__class__ 也是type。
type也可动态创建类
二、元类设置
metaclass 属性
在声明一个类时可以使用 metaclass
class Foo(object):
__metaclass__ = something ...
pass
三、查找机制
查找机制:
- 元类信息一般存放在__metaclass__属性中,元类依次向上查询,直到找到结束;
- 类的创建时,一般先查找资深元类指向;
- 若自身无元类信息,则向上查询继承的父类;
- 父类没有元类信息,则继续查询模块中元类信息;
- 若直至当前模块都无元类定义信息,则默认使用***type***作为元类。
四、抽象类示例
抽象类的创建;依赖abc模块,两种方式:
-
指定元类(metaclass)
-
继承抽象类(ABC)
from abc import ABC class Foo(ABC): pass
ABCMeta元类定义