Это не 100% ответ (например, он не будет работать для классов, использующих __slots__
), но он будет работать в большинстве случаев:
>>> class A(object):
... x = 42
... y = 43
...
>>> class B(A):
... x = 11
...
>>> b = B()
Вы можете проверить, является ли атрибутопределяется в классе прямо так:
>>> 'x' in b.__class__.__dict__
True
>>> 'y' in b.__class__.__dict__
False
Теперь, чтобы ответить на ваш вопрос:
# comment explaining why this unusual check is necessary
if 'attribute' in instance.__class__.__dict__:
value = instance.attribute
else:
value = None