我刚开始学习Python并且来自Java / C ++背景,并发现以下行为有点令人困惑。在调用s.add_trick(“Woof”)和d.add_trick(“Woof”)后,s.tricks和d.tricks都包含[“Woof”,“Bark”]。但是,调用party()没有相同的行为。谁能解释一下?
class PartyAnimal:
x = 0
name = ''
tricks = []
def __init__(self, name):
self.name = name
def party(self):
self.x += 1
def add_trick(self, trick):
self.tricks.append(trick)
s = PartyAnimal("Sally")
d = PartyAnimal("Danny")
s.party()
d.party()
s.add_trick("Woof")
d.add_trick("Bark")
print 's', s.name, s.x, s.tricks
print 'd', d.name, d.x, d.tricks
输出是这样的:
s Sally 1 ['Woof', 'Bark']
d Danny 1 ['Woof', 'Bark']
答案 0 :(得分:5)
您正在创建一个由所有类实例共享的tricks
列表。请改为在__init__
中创建一个新列表:
def __init__(self, name):
self.name = name
self.tricks = []