如何设置Python类属性而不实际设置?
有人能解释一下下面发生了什么吗?究竟为什么object如何设置Python类属性而不实际设置?,python,Python,有人能解释一下下面发生了什么吗?究竟为什么objectb具有objecta列表的值 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 =
b
具有objecta
列表的值
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()
如果我不清楚或者需要更多信息,请告诉我。谢谢。因为在python中,默认参数只计算一次(定义函数时)。因此,该类的所有实例都使用相同的列表
A
但是,如果希望每个实例都有自己的列表,则应执行以下操作:
def __init__(self):
self.A = []
>>> a = mutate_A()
>>> b = Test()
>>> print b
[]
出于这个原因,应该避免可变默认参数吗?您建议如何解决此问题?这不太正确。参数是在定义函数时计算的,而不是在第一次调用函数时计算的。@gjdanis,除非您特别想要该功能,否则您应该避免使用它。如何修复它?我更新了我的answer@IsmailBadawi哦,对不起,想到英语误译了。更新。Thanks@sshashank124:谢谢。这是相当惊人的。。。