为什么我可以覆盖类变量?指针被覆盖?

时间:2018-09-27 06:31:05

标签: python python-3.x variables instance-variables class-variables

我有这段代码:

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)

哪个输出:

4
4
3
4

此处“ wheels”被定义为类变量。类变量由所有对象共享。但是,我可以为该类的SPECIFIC实例更改其值吗?

现在我知道要修改类变量,我需要使用类名:

Car.wheels = 3

对于这种情况的发生方式/原因,我仍然感到困惑。我是创建实例变量还是使用以下方法覆盖该实例的类变量:

car.wheels = 3

-还是其他?

1 个答案:

答案 0 :(得分:1)

是的,您没有覆盖类属性wheels,而是为对象wheels创建了一个名为car的实例属性并将其设置为3。

可以使用the special __dict__ attribute进行验证:

>>> class Car:
...   wheels=4
... 
>>> c1 = Car() 
>>> c2 = Car()
>>> 
>>> c1.wheels=3
>>> c1.wheels
3
>>> c2.wheels
4
>>> c1.__dict__
{'wheels': 3}
>>> c2.__dict__
{}