我有一个继承层次结构,其中一些类有一个名为“pickled”的类属性。我想知道A.pickled
它是否存在,或者如果不存在则 None ——即使 A 派生自许多类,包括例如 B 并且B.pickled
存在(或不存在)。
现在我的解决方案抓取A
的__mro__
. 如果可能的话,我想要一个更清洁的解决方案。
我有一个继承层次结构,其中一些类有一个名为“pickled”的类属性。我想知道A.pickled
它是否存在,或者如果不存在则 None ——即使 A 派生自许多类,包括例如 B 并且B.pickled
存在(或不存在)。
现在我的解决方案抓取A
的__mro__
. 如果可能的话,我想要一个更清洁的解决方案。
要绕过通过 的正常搜索__mro__
,请直接查看类的属性字典。您可以使用该vars()
功能:
return vars(cls).get('pickled', None)
您也可以直接访问该__dict__
属性:
return cls.__dict__.get('pickled', None)
但使用内置函数优于直接访问双下划线属性字典。
object.__getattribute__
是用于查看类属性的错误方法;请参阅type.__getattribute__ 和 object.__getattribute__ 有什么区别?
type.__getattribute__
是用于对类进行属性访问的内容,但这仍然会搜索 MRO。
我不确定,但也许
try:
return object.__getattribute__(cls, 'pickled')
except AttributeError:
return None