Skip to main content
 首页 » 编程设计

python之如何确定属性是位于原始类还是继承类

2025年05月04日11cloudgamer

在下面的代码中:

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'>