我有一个继承层次结构,其中一些类有一个类属性,例如,'pickle '。如果存在,我想得到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__
是查看类属性的错误方法;看看这两种类型有什么不同。__getattribute__和object.__getattribute__?
type.__getattribute__
是用于类的属性访问的,但它仍然会搜索MRO。
我不确定,但也许
try:
return object.__getattribute__(cls, 'pickled')
except AttributeError:
return None