微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

向对象添加值向所有相同类型的对象添加值

如何解决向对象添加值向所有相同类型的对象添加值

我正在使用 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 举报,一经查实,本站将立刻删除。