Python类用户输入函数失效求助:多玩家游戏信息存储异常
问题分析与改进方案
核心问题点
- 方法设计逻辑错误:
get_user_input作为实例方法,调用它需要先存在一个Players实例,但我们的需求是通过输入创建新玩家,逻辑完全颠倒。 - 实例创建语法错误:代码中
return self(firstname, lastname, coins)是错误用法,self是类的实例对象,不能像类本身那样用来创建新实例。 - 字符串拼接类型错误:
full_info方法直接拼接字符串和整数(coins是int类型),会触发TypeError。
改进方案一:用类方法实现玩家创建
将get_user_input改为类方法,直接通过类创建新玩家实例,无需依赖已存在的对象:
class Players(): def __init__ (self, firstname, lastname, coins): self.firstname = firstname self.lastname = lastname self.coins = coins def full_info(self): # 修复类型错误,用f-string格式化输出更清晰 return f"{self.firstname} {self.lastname} - 当前积分: {self.coins}" @classmethod def get_user_input(cls): firstname = input("请输入你的名字: ") lastname = input("请输入你的姓氏: ") coins = 100 # 初始积分自动分配 # 通过类引用cls创建并返回新实例 return cls(firstname, lastname, coins)
使用方式:
# 从用户输入创建新玩家 new_player = Players.get_user_input() # 查看玩家信息 print(new_player.full_info())
改进方案二:用独立函数实现玩家创建
如果不想修改类结构,可以写一个独立函数来处理输入并创建实例:
class Players(): def __init__ (self, firstname, lastname, coins): self.firstname = firstname self.lastname = lastname self.coins = coins def full_info(self): return f"{self.firstname} {self.lastname} - 当前积分: {self.coins}" def create_player_from_input(): firstname = input("请输入你的名字: ") lastname = input("请输入你的姓氏: ") return Players(firstname, lastname, 100)
使用方式:
new_player = create_player_from_input() print(new_player.full_info())
内容的提问来源于stack exchange,提问作者cupcake3
相关产品推荐
相关产品推荐

