面试题答案
一键面试class MyClass:
class_attribute = 10
# 使用类修改类属性
MyClass.class_attribute = 20
print(MyClass.class_attribute) # 输出 20
# 创建实例
instance = MyClass()
# 使用实例修改类属性
instance.class_attribute = 30
print(instance.class_attribute) # 输出 30
print(MyClass.class_attribute) # 输出 20
解释:
- 当使用类
MyClass.class_attribute = 20
修改类属性时,由于类属性是类的所有实例共享的,这种修改会影响到类以及所有现有和未来创建的实例。因为类属性存储在类对象中,直接通过类修改就改变了这个共享的值。 - 当使用实例
instance.class_attribute = 30
修改时,实际上是在实例对象上创建了一个与类属性同名的实例属性。这并不会影响类属性本身的值,所以MyClass.class_attribute
仍然是 20 。而instance.class_attribute
访问的是实例自己创建的这个属性,值为 30 。