我如何才能发现一个类在其主体中对一个字段有多个定义?例如:
class cl:
a = 'abc'
a = 'qa'
print cl.a
这里我们将 cl.a 打印为 'qa'。但是,在这种情况下有什么方法可以引发异常或发现该字段有多个定义。 我尝试在类 dict 中查找,还使用 dir() 方法获取所有属性的列表。它们都没有显示该字段的多个定义。
请您参考如下方法:
元类的 __prepare__ 方法可以返回一个替代映射类型,用作类的属性字典。该映射可以允许对任何新键进行赋值,但如果对命名空间中已存在的键再次尝试赋值,则会引发异常。
class AssignOnceDict(dict):
def __setitem__(self, key, value):
if key in self:
raise Exception("Duplicate assignment")
super().__setitem__(key, value)
class AssignOnceMeta(type):
def __prepare__(name, bases, **kwargs):
return AssignOnceDict()
class cl(metaclass=AssignOnceMeta):
a = 1
a = 2 # raises an exception
