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

创建存储类实例并按需检索:分数追踪系统AttributeError修复

问题分析与修复方案

错误原因

你遇到的AttributeError本质是两个核心问题:

  1. 第一个循环中,你往列表里存的是字符串("user" + str(i)),而不是实际创建的User对象,导致列表里没有可调用方法的用户实例。
  2. 第二个循环中,你输入的是用户名字符串,直接用这个字符串调用getStats方法——字符串本身没有这个属性,自然报错。另外你还漏写了方法调用的括号(getStats应该是getStats())。

修复步骤与代码示例

1. 先完善User类(添加用户名属性)

如果你的User类还没有用户名属性,先补上,方便后续关联和查找:

class User:
    def __init__(self, username):
        self.username = username
        self.total_games = 0
        self.total_wins = 0
    
    def getStats(self):
        # 处理除数为0的情况
        win_ratio = self.total_wins / self.total_games if self.total_games > 0 else 0
        print(f"用户名: {self.username}, 总游戏数: {self.total_games}, 总获胜数: {self.total_wins}, 胜负比: {win_ratio:.2f}")

2. 修改主逻辑代码

user_list = []  # 不要用list作为变量名,会覆盖Python内置类型
i = 1
cont = "y"

while cont.lower() == "y":
    username = "user" + str(i)
    # 创建User对象并存入列表,而不是存字符串
    new_user = User(username)
    user_list.append(new_user)
    # 可选:创建时查看统计
    # new_user.getStats()
    i += 1
    cont = input("Continue?: ")

# 打印用户列表时显示用户名,而非对象内存地址
print("已创建用户列表:")
for user in user_list:
    print(user.username)

while True:
    selected_name = input("选择要查看的用户: ")
    # 遍历列表找到对应的User对象
    target_user = None
    for user in user_list:
        if user.username == selected_name:
            target_user = user
            break
    if target_user:
        target_user.getStats()  # 注意加括号调用方法
    else:
        print(f"用户 {selected_name} 不存在")
    cont2 = input("继续查看吗?: ")
    if cont2.lower() != "y":
        break

关键修改点

  • 列表存储的是User对象而非字符串,保留了实例的方法和属性。
  • 通过用户名遍历列表匹配对应的对象,确保调用方法的是用户实例而非字符串。
  • 修复了方法调用漏写括号的问题,同时处理了用户不存在的边界情况。
  • 避免使用list作为变量名,防止覆盖Python内置类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:50:26