没有超类属性的类属性



我有一个继承层次结构,其中一些类有一个类属性,例如,'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

相关内容

  • 没有找到相关文章

最新更新