我们创建的对象一般时从object继承来的, 但是如果我们:
1 | type(object) |
元类是什么?元类实际上就是用来创建类的东西
事实上type就是一个元类, 是用来创建所有的类的元类
元类
如果我们要创建自己定义的元类的话,也要从type中继承
原理
1 | # 创建一个元类 |
- 对于父类
Foo
,Python会寻找__metaclass__
, 如果找到了, Python就会用它来创建类Foo, 如果没有找到, 就会用内建的type
来创建这个类 - 对于子类
Bar
, python会先在子类中寻找__metaclass__
, 如果找到了, Python就会用它来创建类Bar, 如果没有找到, 就再从父类中寻找__metaclass__
, 直到type创建元类
元类的主要目的就是为了当创建类时能够自动地改变类。创建类我们需要定义__new__
,__new__
是在__init__
之前被调用的特殊方法,是用来创建对象并返回的方法
1 | class OneMetaclass(type): |
__new__
接受四个参数
cls — 当前准备创建的类的对象
name — 类的名字, 字符串
bases — 类继承的父类, 列表
attrs — 类的属性, 列表