You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord健身机器人Exercise类change_name方法无法修改属性问题

Discord健身机器人Exercise类name属性修改失效问题解决

问题描述

开发Discord健身机器人时,将自定义Exercise类实例存储在push_exercises等字典中,调用change_name方法修改对象name属性后,发现属性并未更新。已确认对象创建正常、字典可正常访问,类的其他功能(如修改weight、comment)均正常工作。

问题分析

  1. 字典键未同步更新:当前代码仅修改了Exercise实例的name属性,但字典的键仍然是旧的练习名称。这会导致后续用新名称查找时无法找到对象,容易误以为实例的name属性未修改。
  2. 类属性冗余:Exercise类中定义了顶层类属性name = "",虽然__init__方法中会覆盖为实例属性,但这种冗余可能引发属性访问混淆。

解决方案

1. 修改update命令中的名称更新逻辑

在修改实例name属性的同时,同步更新字典的键,确保后续查找一致性:

# 替换原change_name调用部分的代码
old_name = user_exercise_name
# 从字典中移除旧键对应的对象
exercise = push_exercises.pop(old_name)
# 修改对象名称
exercise.change_name(user_input)
# 用新名称作为键,将对象重新存入字典
push_exercises[user_input] = exercise
await ctx.send(f"Exercise name updated successfully from {old_name} to {user_input}")

2. 优化Exercise类定义

移除冗余的类属性,使用默认参数简化__init__方法,避免类属性与实例属性混淆:

class Exercise:
    def __init__(self, name, weight=0, comment=""):                                
        self.name = name
        self.weight = weight
        self.comment = comment

    def change_name(self, name):
        self.name = name

    def change_weight(self, weight):
        self.weight = weight

    def change_comment(self, comment):
        self.comment = comment

    def get_name(self):
        return self.name

    def get_weight(self):
        return self.weight

    def get_comment(self):
        return self.comment

    def print_exercise(self):
        print(f"Name: {self.name}")
        print(f"Weight: {self.weight}")
        print(f"Comment: {self.comment}")

3. 补充验证逻辑(可选)

在更新完成后,可添加验证步骤,确认实例属性已修改:

# 修改后添加验证
updated_name = exercise.get_name()
await ctx.send(f"Verified: exercise name is now {updated_name}")

内容的提问来源于stack exchange,提问作者Jesse Tzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:17:35