Asw*_*n G 1 python list append
今天我附加了python列表遇到了一个相当奇怪的问题.我试图创建一个数组,其每个元素会像一个C struct.其中一个元素本身就是一个列表.这是有问题的代码:
class players:
name='placeholder'
squad=list()
teams=list()
teams.append(players())
teams.append(players())
teams[0].name="abc"
teams[1].name="xyz"
teams[0].squad.append("Joe")
for w in teams:
print(w.name)
print(w.squad)
Run Code Online (Sandbox Code Playgroud)
我期望的输出是:
abc
['Joe']
xyz
[]
Run Code Online (Sandbox Code Playgroud)
因为我只squad为团队添加了一个成员[0].但我得到的输出是:
abc
['Joe']
xyz
['Joe']
Run Code Online (Sandbox Code Playgroud)
名称设置正常但.append附加到两个元素teams!
是什么导致这种情况,我该如何解决这个问题?
mpr*_*rat 11
其原因是,在你的类定义,squad并且name是类变量,而不是实例变量.player初始化新对象时,它实际上squad是在播放器的所有实例中共享相同的变量.相反,您希望为显式分隔特定于实例的变量__init__的player类定义一个方法.
class players:
def __init__(self):
self.name = 'placeholder'
self.squad = []
Run Code Online (Sandbox Code Playgroud)
然后,在初始化新player对象时,它有自己的squad变量.你的其余代码现在应该工作得很好,只有正确的对象squad被附加到.
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |