Python:如何实现含内置input函数的PersonReader类方法?
问题分析与修正方案
咱们先拆解下你代码里的几个核心问题,然后一步步修正:
1. 类方法定义错误
你的from_input方法没有被标记为类方法,也没有正确接收类参数。类方法需要用@classmethod装饰器修饰,并且第一个参数固定为cls(代表当前类本身),这样才能在方法内部创建类的实例。你之前的调用方式Personreader.from_input(x)或Personreader.from_input()报错,本质就是因为这个方法没有被正确定义为类方法,参数传递逻辑完全混乱。
2. __str__方法的逻辑错误
__str__方法的作用是返回对象的字符串表示,供print()等场景使用,但你现在直接在方法里调用print()——这会导致print(Personreader实例)时输出None(因为print()函数没有返回值),完全不符合需求。正确的做法是返回一个格式化好的字符串。
3. 实例创建逻辑错误
你在from_input里写的return x(input(),input())完全不符合Python的类实例创建逻辑,应该用类参数cls来调用构造函数,把收集到的输入值传进去。
修正后的完整代码
class PersonReader: def __init__(self, name, year): self.name = name self.year = year @classmethod def from_input(cls): # 友好提示用户输入信息 name = input("请输入姓名:") year = input("请输入出生年份:") # 如果需要年份是整数类型,可以转成int:year = int(input("请输入出生年份:")) return cls(name, year) def __str__(self): # 返回指定格式的字符串 return f"{self.name} ({self.year})"
调用示例
# 通过类方法创建实例 person = PersonReader.from_input() # 打印实例,会自动触发__str__方法 print(person)
运行后,当你输入姓名和年份,比如输入Alice和1995,就会输出:Alice (1995)
内容的提问来源于stack exchange,提问作者Jacobiman
相关产品推荐
相关产品推荐

