在下面的代码中:
class Klass_1:
a = 1
class Klass_2(Klass_1):
b = 2
k = Klass_2()
可以同时访问 k.a和 k.b , 和 hasattr(k, ...)是True对于“a”和“b”。
如何确定属性是否位于原始类中 Klass_2或继承类 Klass_1 ?
请您参考如下方法:
您必须检查 MRO 中每个类的 __dict__ 对象(您可以在此处使用 vars() 函数使代码更清晰):
def class_for_attribute(instance, attribute_name):
for cls in type(instance).mro():
if attribute_name in vars(cls):
return cls
演示:
>>> class_for_attribute(k, 'a')
<class '__main__.Klass_1'>
>>> class_for_attribute(k, 'b')
<class '__main__.Klass_2'>
