打印出来的原因是什么?

时间:2018-03-06 07:52:52

标签: python

class Person:
    pets=[]
    def add_pet(self, pet):
        self.pets.append(pet)

jane = Person()
bob = Person()

jane.add_pet("cat")
print(jane.pets)
print(bob.pets)

打印出来:

['cat']
['cat']

为什么鲍勃的宠物也是猫?我没有把宠物附加到鲍勃身上。

3 个答案:

答案 0 :(得分:0)

因为你与Person的每个实例共享变量pet。

class Person:
    def __init__(self):
        self.pets = []

    def add_pet(self, pet):
        self.pets.append(pet)

这应该可以解决问题。

答案 1 :(得分:0)

由于您声明它的位置,列表pets在类中的所有对象之间共享。您需要一个名为__init__构造函数,它在创建对象时自动调用:

class Person:
    def __init__(self):
        self.pets = []

    def add_pet(self, pet):
        self.pets.append(pet)


jane = Person()
bob = Person()

jane.add_pet("cat")
print(jane.pets)
print(bob.pets)

给出:

['cat']
[]

答案 2 :(得分:0)

如果您希望宠物成为实例成员:

class Person:
    def __init__(self):
        self.pets = []
    ...

输出:

['cat']
[]