Why can I override a class variable? Pointer being overridden?
本问题已经有最佳答案,请猛点这里访问。
我有一点代码:
1 2 3 4 5 6 7 8 9 10 11 12 | class Car: wheels = 4 if __name__ =="__main__": car = Car() car2 = Car() print(car2.wheels) print(car.wheels) car.wheels = 3 print(car.wheels) print(car2.wheels) |
输出:
1 2 3 4 | 4 4 3 4 |
这里"轮子"被定义为类变量。类变量由所有对象共享。但是,我可以更改该类的特定实例的值吗?
现在我知道要修改类变量,我需要使用类名:
1 | Car.wheels = 3 |
我仍然不明白这是怎么发生的。我是在创建实例变量,还是使用以下方法覆盖该实例的类变量:
1 | Car.wheels = 3 |
--或者别的什么?
是的,您不重写类属性
这可以使用特殊的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | >>> class Car: ... wheels=4 ... >>> c1 = Car() >>> c2 = Car() >>> >>> c1.wheels=3 >>> c1.wheels 3 >>> c2.wheels 4 >>> c1.__dict__ {'wheels': 3} >>> c2.__dict__ {} |