我在浏览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仍然是“蓝色”。我很困惑为什么会这样。