Python对象列表奇怪的行为

Dan*_*Liu 0 python

我刚开始学习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)

Ant*_*ala 5

您正在创建一个tricks由所有类实例共享的列表.__init__改为创建一个新列表:

def __init__(self, name):
    self.name = name
    self.tricks = []
Run Code Online (Sandbox Code Playgroud)

  • @AnttiHaapala得到了它.来自c#background,我认为python中的`self`在c#/ java中是`this`.因此,你不能把`this`引用到类级变量(c#/ java中的`static`).谢谢.我今天学了些新东西. (2认同)