<分区>
r={'a':6}
c = Myclass(**r)
out: a
当我执行 Myclass(**r)
时,这个类从 MyMeta
调用了 fields
,而不是从 Myclass
。在这个过程中会发生什么?为什么它不使用 Myclass
中的 fields
?
class MyMeta(type) :
def __new__(mcs,name,bases,attr) :
fields = {}
fields['a'] = 2
fields['b'] = 4
fields['c'] = 44
if '__init__' not in attr:
def init(self,**kwargs):
self.api = kwargs.pop('api', None)
for k,v in kwargs.items():
if k in fields :
print(v)
attr['__init__'] = init
return type.__new__(mcs,name,bases,attr)
class Myclass(metaclass = MyMeta ):
fields = {'c': 5}
def get(self):
print(4)