我正在使用元类设置类属性fields
:
class MyMeta(type):
def __new__(mcs, name, bases, clsdict):
clsdict['fields'] = {k: v
for k, v in clsdict.items()
if <my_condition>}
return super(MyMeta, mcs).__new__(mcs, name, bases, clsdict)
class MyBaseClass(metaclass=MyMeta):
fields = {}
以下实例会得到预期的结果:
class SubClass(MyBaseClass):
param1 = 1 # meets <my_condition>
>>> SubClass.fields
{param1: 1}
但是如果我现在子类化SubClass
,fields
就是空的:
class SubSubClass(SubClass):
pass
>>> SubSubClass.fields
{}
我该如何更新继承层次结构中所有类的classdict,以便从基类更新fields变量?
clsdict['fields'].update(base.fields)
上要加上try/except
?如果基类缺少fields
,你已经设置了它。 - ProfHase85