我有一个继承层次结构,其中一些类具有名为“pickled”的类属性。我想获得 A.pickled
如果它存在,或者 None 如果不存在 - 即使 A 派生自许多类,包括例如 B 和 B.pickled
存在(或不存在) .
现在我的解决方案抓取 A
的 __mro__
。如果可能的话,我想要一个更干净的解决方案。
最佳答案
要绕过通过__mro__
进行的正常搜索,请直接查看类的属性字典。您可以使用 vars()
function为此:
return vars(cls).get('pickled', None)
您也可以直接访问 __dict__
属性:
return cls.__dict__.get('pickled', None)
但使用内置函数优于直接访问双下划线属性字典。
object.__getattribute__
是用于查看类属性的错误方法;请参阅What is the difference between type.__getattribute__ and object.__getattribute__?
type.__getattribute__
用于类上的属性访问,但仍然会搜索 MRO。
关于python - 没有父类(super class)属性的类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24150636/