Equ*_*Dev 1 python attributes python-3.x
在下面的代码中:
class Klass_1:
a = 1
class Klass_2(Klass_1):
b = 2
k = Klass_2()
Run Code Online (Sandbox Code Playgroud)
它可以同时访问k.a和k.b,和hasattr(k, ...)是True两个"A"和"B".
如何确定属性是位于原始类Klass_2还是继承类Klass_1?
您必须检查__dict__MRO中每个类的对象(您可以使用vars()此处的函数来使代码更清晰):
def class_for_attribute(instance, attribute_name):
for cls in type(instance).mro():
if attribute_name in vars(cls):
return cls
Run Code Online (Sandbox Code Playgroud)
演示:
>>> class_for_attribute(k, 'a')
<class '__main__.Klass_1'>
>>> class_for_attribute(k, 'b')
<class '__main__.Klass_2'>
Run Code Online (Sandbox Code Playgroud)