1

我有一个继承层次结构,其中一些类有一个名为“pickled”的类属性。我想知道A.pickled它是否存在,或者如果不存在则 None ——即使 A 派生自许多类,包括例如 B 并且B.pickled存在(或不存在)。

现在我的解决方案抓取A__mro__. 如果可能的话,我想要一个更清洁的解决方案。

4

2 回答 2

2

要绕过通过 的正常搜索__mro__,请直接查看类的属性字典。您可以使用该vars()功能

return vars(cls).get('pickled', None)

您也可以直接访问该__dict__属性:

return cls.__dict__.get('pickled', None)

但使用内置函数优于直接访问双下划线属性字典。

object.__getattribute__是用于查看类属性的错误方法;请参阅type.__getattribute__ 和 object.__getattribute__ 有什么区别?

type.__getattribute__是用于对类进行属性访问的内容,但这仍然会搜索 MRO。

于 2014-06-10T21:33:50.140 回答
0

我不确定,但也许

try:
    return object.__getattribute__(cls, 'pickled')
except AttributeError:
    return None
于 2014-06-10T21:05:46.693 回答