如何在没有实际设置的情况下设置Python类属性?

时间:2014-04-08 03:00:11

标签: python

有人可以解释下面发生了什么吗?为什么对象b具有对象a列表的值?

class Test:

    def __init__(self, A = []):
        self.A = A

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

def mutate_A():
    a = Test()
    a.A.append(1)

    return a

def problem_here():
    a = mutate_A()
    b = Test()

    print b  # why does this print [1] in python 2.7

problem_here()

如果我不清楚或需要更多信息,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:1)

因为在python中,默认参数仅计算一次(定义函数时)。因此,该类的所有实例都使用相同的列表A

但是,如果您希望每个实例都有自己的列表,那么您应该这样做:

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

>>> a = mutate_A()
>>> b = Test()
>>> print b
[]