Python附加到错误的列表?

Python附加到错误的列表?,python,list,object,pygame,Python,List,Object,Pygame,我搞不懂这个问题。我有一个玩家对象和一些敌人对象,它们都是从演员类继承的。玩家和敌人都有射击(自我)的方法,可以让他们射出子弹。这个子弹应该被添加到他们各自的射弹列表中,但是当程序为敌人调用self.projectles.append(sparket())时,它会将它添加到玩家的射弹列表中 我曾经运行过一个程序,在这个程序中,唯一射出子弹的演员是敌人,我看到len(player.projectles)返回越来越大的值,即使它不应该增长。感谢您的帮助。每次程序更新时,该块都会运行,它会通过游戏对象

我搞不懂这个问题。我有一个
玩家
对象和一些
敌人
对象,它们都是从
演员
类继承的。
玩家
敌人
都有
射击(自我)
的方法,可以让他们射出子弹。这个子弹应该被添加到他们各自的射弹列表中,但是当程序为敌人调用
self.projectles.append(sparket())
时,它会将它添加到玩家的射弹列表中

我曾经运行过一个程序,在这个程序中,唯一射出子弹的演员是敌人,我看到
len(player.projectles)
返回越来越大的值,即使它不应该增长。感谢您的帮助。每次程序更新时,该块都会运行,它会通过
游戏
对象的敌人列表,并分别更新每个敌人:

对于self.敌人中的敌人:
敌方更新(self.player)
这是
敌人
的职业:

职业敌人(演员):
def喷射(自):
image=pygame.transform.rotate(投影图像、自身角度)
self.projectles.append(投射(self.getCenter()[0]-6,self.getCenter()[1]-16,12,32,image,5,self.angle,True))
射击之声
def TRYTOSHOT(自):
如果self.attackCoolDown>=30:
self.attackCoolDown=0
self.shoot()
def更新(自我、玩家):
自我指向(player.x,player.y)
Actor.update(self)
self.tryToShoot()
Actor
类初始化
投射物

类参与者(实体):
射弹=[]

您发布的代码将
投射物显示为类属性,而不是实例属性。因此,所有的
Actor
s共享一个
投射物列表。要创建单独的列表,请在
方法中初始化属性。

您发布的代码将
投射物显示为类属性,而不是实例属性。因此,所有的
Actor
s共享一个
投射物列表。若要创建单独的列表,请在
\uuuu init\uuuuu
方法中初始化属性。

当您将
投射物作为类变量添加时,
敌方
玩家
相同的列表对象中

此外,当您使用self引用某个对象时(在实例字典中找不到),它默认为varable类,这就是为什么您的玩家和敌人的长度都在增长:它们共享同一个list对象

要解决此问题,请将
投射=[]
行放入
\uuuu init\uuuu
方法中:

更改:

类参与者(实体):
射弹=[]
至:

类参与者(实体):
定义初始化(自):
self.projectles=[]
来修复这个错误

PS:您似乎在
Actor
类中没有
update
方法。
如果你这样做,使用
super()

此外,当您使用self引用某个对象时(在实例字典中找不到),它默认为varable类,这就是为什么您的玩家和敌人的长度都在增长:它们共享同一个list对象

要解决此问题,请将
投射=[]
行放入
\uuuu init\uuuu
方法中:

更改:

类参与者(实体):
射弹=[]
至:

类参与者(实体):
定义初始化(自):
self.projectles=[]
来修复这个错误

PS:您似乎在
Actor
类中没有
update
方法。
如果您这样做,使用
super().update()
将比
Actor.update(self)

更具python风格。请参阅并使用
self.projectles
。感谢您的回复-我不知道如何在python中生成静态变量,现在我知道了!实际上,您不知道如何生成静态变量:Python不支持这个概念。对于您当前的实现来说,实例变量可能已经足够接近了,但它们并不完全相同。请使用
self.projectles
。感谢您的回答-我不知道如何在python中生成静态变量,现在我知道了!实际上,您不知道如何生成静态变量:Python不支持这个概念。实例变量对于您当前的实现来说可能已经足够接近了,但它们并不完全相同。我在Actor中有一个update方法,但我不知道我可以调用super().update()。谢谢你的帮助。我在Actor中有一个更新方法,但我不知道我可以直接调用super().update()。谢谢你的帮助。