如何解决向对象添加值向所有相同类型的对象添加值
我正在使用 pygame 库。我有 Actor 类(用于游戏对象)和 ActorContext 类(用于游戏对象列表):
class ActorContext:
list = []
alpha_range = 255
time_diff = 0
alpha_diff = 0
def add(self,obj: Actor):
self.list.append(obj)
在我的主应用中,我定义了对象:
enemy_context = ActorContext()
bullet_context = ActorContext()
dummy_context = ActorContext()
if event.key == pg.K_e:
e = Enemy(img_src=enemy)
e.rand_change()
e.rand_pos()
enemy_context.add(e)
if event.key == pg.K_r:
if len(enemy_list) > 0:
enemy_context.remove(1)
问题是,当我调用 enemy_context.add(e)
时,在所有 对象列表中添加了相同的值:emergent_context、bullet_context 和 dummy_context
解决方法
每个实例的属性应该在 __init__
方法中初始化,而不是作为类属性。
class ActorContext:
alpha_range = 255
time_diff = 0
alpha_diff = 0
def __init__(self):
self.list = []
def add(self,obj: Actor):
self.list.append(obj)
,
你应该这样调整你的班级:
class ActorContext:
alpha_range = 255
time_diff = 0
alpha_diff = 0
def __init__(self):
self.list = []
def add(self,obj: Actor):
self.list.append(obj)
这确保 list
是一个实例属性,而不是一个类属性。它现在对于 ActorContext
的所有实例都是分开的。
__init__(self)
函数就是所谓的 constructor
- 每当您创建相关对象的实例时调用的特殊函数,例如 ActorContext()
。
尝试像这样定义你的类 ActorContext :
class ActorContext:
def __init__(self):
self.list = []
self.alpha_range = 255
self.time_diff = 0
self.alpha_diff = 0
def add(self,obj: Actor):
self.list.append(obj)
有效果吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。