没有为类的所有实例修改类属性[Python]

时间:2015-06-03 14:13:11

标签: python

我在浏览python教程时编写了这个小测试用例,但是我对收到的输出感到非常困惑。

class Car(object):
    c = "blue"
    def __init__(self, model):
         self.model = model

c1 = Car("model1")
c2 = Car("model2")

首先我打印了两个实例的“c”属性,它们都是预期的“蓝色”。然后我写道:

c1.c = "red"
然后我打印出c1.c和c2.c,但只改变了c1.c。 c2.c仍然是“蓝色”。这使我感到困惑,因为根据文档,c属性范围是这样的,所有类的实例都可以访问它。在python教程中,他们做了一个模拟示例,其中:

  class Dog:

tricks = []            

def __init__(self, name):
    self.name = name

def add_trick(self, trick):
    self.tricks.append(trick)

d = Dog("fido")
e = Dog("buddy")
d.add_trick("roll")
d.add_trick("play")
print e.tricks 

这里,为两个实例修改了tricks属性。然后我修改了我的代码以包含一个setter方法,尽管我认为它不应该是必要的:

class Car(object):
f = f1
s = "string"
condition = "new"
c = "blue"
def __init__(self, model, mpg):
    self.model = model
    #self.c = color
    self.mpg   = mpg

def change_color(self, x):
    self.c = x

然后我运行了c1.change_color(“red”),它将c1.c更改为“red”。但是,c2.c仍然是“蓝色”。我很困惑为什么会这样。

0 个答案:

没有答案