我有一个继承层次结构,其中一些类具有一个名为例如' pickle'的类属性。如果它存在,我想得到A.pickled
或如果不存在则得到无 - 即使A派生自许多类,例如B和B.pickled
存在(或不存在)。
现在我的解决方案抓取A
__mro__
。如果可能的话,我想要一个更清洁的解决方案。
答案 0 :(得分:2)
要绕过__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。
答案 1 :(得分:0)
我不确定,但也许
try:
return object.__getattribute__(cls, 'pickled')
except AttributeError:
return None