python-抽象-metaclass
元类用于创建类,而类用于创建实例
python解释器在遇到类定义的时候,其实是用type()
函数动态创建的类类型
1 | class A: |
所以类A
其实也是一个对象,继承于object
,而且是type
的一个对象(type
也是一个类哦!)
metaclass
(元类)又是什么呢,上面A = type('A',(object,),dict(test=f))
使用type
来创建的类,那么如果我声明一个类去继承type
,是不是可以A = mytype('A',(object,),dict(test=f))
来创建类呢,bingo,其实就是这样.
1
2
3
4
5
6
7
8
9class AMetaclass(type):#一般元类以Metaclass结尾
pass
A = AMetaclass('A',(object,),dict())
print(type(A))
print(A.__bases__)
### 输出
<class '__main__.AMetaclass'>
(<class 'object'>,)
可以看到,A
变成了AMetaclass
的一个对象
那么type
又是一个什么呢,和object
又是什么关系?
1
2
3
4
5
6
7
8
9print(object.__class__)
print(object.__bases__)
print(type.__class__)
print(type.__bases__)
###
<class 'type'>
()
<class 'type'>
(<class 'object'>,)
可以看出来,object
是type
的一个对象,type
继承于object
,所以说,object
和 type
的关系很像鸡和蛋的关系,先有object
还是先有type
没法说,object
和type
是共生的关系,必须同时出现的.
下面是一个实现示例
1 | class DemoMetaClass(type): |
可以看到,动态的往A
里面添加了一个true_name
的属性