Python默认参数列表强行为[重复]

问题描述 投票:0回答:1

这很奇怪,令人沮丧。所以我有一个带有默认参数构造函数的类。

class part:
  def __init__(self, num, center=[0, 0, 0]):
    self.center = center
    self.center[1] = num

a = part(1)
print(a.center)
b = part(2)
print(a.center)
print(b.center)

如果我在上面运行代码,我会得到

[0, 1, 0]
[0, 2, 0]
[0, 2, 0]

不是我真正想要的。

我找到了下面已经回答的解决方案。但是,我不知道为什么Python这样设计,这非常令人困惑。

python python-3.x python-2.x
1个回答
0
投票

解决方案是将参数传递给默认构造函数。

class part:
  def __init__(self, num, center=[0, 0, 0]):
    self.center = center
    self.center[1] = num

a = part(1, [0,0,0])
print(a.center)
b = part(2, [0,0,0])
print(a.center)
print(b.center)

输出

[0, 1, 0]
[0, 1, 0]
[0, 2, 0]
© www.soinside.com 2019 - 2024. All rights reserved.