如果通过该类的实例设置类属性会发生什么?

时间:2020-06-18 15:09:41

标签: python

编辑:请注意,我在此处使用了错误的“财产”一词。相反,我使用了 variable 类(其他编程语言中的“字段”)。

如果我通过该类的实例设置了一个类的类(或静态)属性,则该实例的属性引用新设置的对象,但是该类或其他实例引用在类级别设置的对象:

class ClassPropertyDemo:
    some_value = 42

cpd_1 = ClassPropertyDemo()
cpd_2 = ClassPropertyDemo()

# Set some_value via the second instance
cpd_2.some_value = 21

print(ClassPropertyDemo.some_value)  # 42 - The value of the class property
print(cpd_1.some_value)              # 42 - The value of the class property
print(cpd_2.some_value)              # 21 - The value set to the property of the class instance

我的问题是这里实际上发生了什么。 cpd_2.some_value是动态创建的新的 instance 属性,该属性隐藏了class属性吗?

1 个答案:

答案 0 :(得分:0)

您可以通过添加以下代码来扩展代码,使其更加清晰:

del cpd_2.some_value
print(cpd_2.some_value)              # 42 - 'Unhide' the original value