我刚开始学习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
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
s Sally 1 ['Woof', 'Bark']
d Danny 1 ['Woof', 'Bark']
Run Code Online (Sandbox Code Playgroud)
您正在创建一个tricks由所有类实例共享的列表.__init__改为创建一个新列表:
def __init__(self, name):
self.name = name
self.tricks = []
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |