为什么我的Python实例被共享?

时间:2013-05-30 12:35:04

标签: python

我的代码:

class Num:

    nums = []

    def add(self, num):
        self.nums.append(num)

    def __str__(self):
        return  str(self.nums)

a = Num()
b = Num()
a.add(5)
print str(a)
print str(b)

产生

[5]
[5]

即使没有添加到b

3 个答案:

答案 0 :(得分:8)

因为nums是一个类属性而不是实例属性。

class Num:

    def __init__(self):
        self.nums = []

    def add(self, num):
        self.nums.append(num)

    def __str__(self):
        return  str(self.nums)

像这样实现它将显示您期望的行为。

答案 1 :(得分:4)

class Num:
    nums = []

在类定义语句中定义nums使nums成为一个类变量。通过将其设置为实例的属性来在__init__方法中定义它:

class Num:
    def __init__(self): # self is the instance
        self.nums = []  # setting nums on the instance

答案 2 :(得分:0)

使nums成为实例属性的空列表

class Num:

    def __init__(self):
        self.nums = []

    def add(self, num):
        self.nums.append(num)

    def __str__(self):
        return  str(self.nums)

然后

a = Num()
b = Num()
a.add(5)
b.add(6)
print str(a)
print str(b)

给出

[5]
[6]