如何仅从当前类而不是从可能的父类获取属性?

Mit*_*tar 5 python django object

如何仅从当前类而不是从可能的父类获取属性?如果我使用getattr它遍历类层次结构,但我想知道None当前类中是否未定义属性(即使它是在某些父类中定义的)。

Mar*_*nas 4

这不是 100% 的证明答案(例如,它不适用于使用 的类__slots__),但它在大多数情况下都有效:

>>> class A(object):
...    x = 42
...    y = 43
... 
>>> class B(A):
...    x = 11
... 
>>> b = B()
Run Code Online (Sandbox Code Playgroud)

您可以像这样直接检查该属性是否在类中定义:

>>> 'x' in b.__class__.__dict__
True
>>> 'y' in b.__class__.__dict__
False
Run Code Online (Sandbox Code Playgroud)

现在回答你的问题:

# comment explaining why this unusual check is necessary
if 'attribute' in instance.__class__.__dict__:
    value = instance.attribute
else:
    value = None
Run Code Online (Sandbox Code Playgroud)