如果我们要修改__new__,我们会经常看到下面这段代码
class Meta(type):
def __new__(cls, name, bases, dct):
return super().__new__(cls, name, bases, dct)
基本是这个格式,一般我们会在__new__里面修改dct。那么他们是什么?
用一个例子解决这个问题。
当你定义一个类的时候:
class Foo(p1, p2):
v = 'var1'
def func(self):
return 'func1'
python大致会把他解析成这样(这里我默认大家理解metaclass是做什么的)
name = 'Foo'
base = (p1, p2)
def func(self):
return 'func'
dct = {'v': 'var1', 'func': func}
Foo = type( name, base, dct )
这里的对应关系已经很明显了。
name就是类名,这里是Foo
base是要继承的父类,(Base1,Base2)
dict包含了里面所有的方法和变量。