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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:42:52