【问题标题】:Python updating object in list when object updates对象更新时Python更新列表中的对象
【发布时间】:2021-04-10 10:36:58
【问题描述】:

我有一个列表,我在其中创建了对象,然后将它们放入列表中,但是当我更新对象本身时,它不会更新列表中的对象。

设置代码:

class char:
    def __init__(self, name, age=0):
        self.name = name
        self.age = age
    def update(self, age='nil'):
        if age == 'nil': age = self.age
        return char(self.name, age)

Mile = char("mile", age=12)
Pauline = char("pauline", age=14)

chars = [Mile, Pauline]

我如何更新角色:

Mile = Mile.update(age = 16)

但是如果我得到chars[0].age,它仍然返回12,除非我这样做chars[0] = Mile

我的问题是:当我更新对象本身时,有没有办法自动更新列表中的对象?我一直在寻找,但还没有找到答案。我应该注意这在 renpy 中(虽然它是 renpy 中的常规 python 代码,所以不应该有效果),当我使用变量检查器时,无论我放入多少对象,它都只会在列表中显示一个指针。

【问题讨论】:

  • 您没有在 update 方法中更新您的更新成员 - 您返回一个不同的新对象。为什么对象本身要改变?你为你的更新方法提供一个新的年龄,然后你用你的实例的年龄覆盖提供的年龄并创建一个新的实例......你永远不会修改实例update被调用

标签: python list object pointers


【解决方案1】:

您真的是要从 update() 方法返回一个新的 char 吗?这样做表示您希望 char 成为一个值对象。

也许您只是想更新对象:

class char:
    def __init__(self, name, age=0):
        self.name = name
        self.age = age
    def update(self, age='nil'):
        if age != 'nil':
            self.age = age

Mile = char("mile", age=12)
Pauline = char("pauline", age=14)

chars = [Mile, Pauline]
Mile.update(age = 16)
print(chars[0].age)

输出:

16

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 2018-01-28
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多