无父属性类属性(Class properties without superclass proper

2019-10-20 06:52发布

我有一个继承层次,其中一些类有例如命名为“腌”一类的属性。 我想获得A.pickled如果存在或无如果没有-即使许多类别,包括例如,B和派生B.pickled存在(或没有)。

现在我的解决方案抓取A__mro__ 。 我想如果可能的话清晰的解决方案。

Answer 1:

要绕过通过正常的搜索__mro__ ,直接在类的属性查字典来代替。 您可以使用vars()函数为:

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

你可以只访问__dict__属性直接过:

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

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

object.__getattribute__是用于寻找类属性的错误的方法; 见类型之间的区别是什么.__ getattribute__和对象.__ getattribute__?

type.__getattribute__是什么是用于在类属性的访问,但还是会搜索MRO了。



Answer 2:

我不知道,但也许

try:
    return object.__getattribute__(cls, 'pickled')
except AttributeError:
    return None


文章来源: Class properties without superclass properties