带有内置输入函数的类方法 (Python)

Jac*_*man 2 python class

我必须进行以下练习:

实现一个支持以下方法的类 PersonReader:

input() 在 shell 提示下询问用户姓名和出生年份(使用内置输入函数)。

str返回字符串“name (year)”(例如,在应用于 PersonReader 时由 print 方法使用)。

我的想法是做这样的事情:

class Personreader:

    def __init__(self, name, year): 
        self.name = name
        self.year = year

    def from_input(x): 
        return x(input(),input())

    def __str__(self):
        print(self.name, self.year)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试调用 Personreader.from_input(x) 或 Personreader.from_input() 时,会出现错误。如何在我的班级中实现此用户输入?

Mas*_*inn 5

您已定义from_input常规方法,这意味着它的第一个参数始终是self(无论您给它什么名称),并且必须在实例上调用或随实例一起提供。

为了使from_input替代的构造函数(这似乎是故意在这里),你应该把它做成类方法与装饰它@classmethod。在这种情况下,(第一个)参数的名称应该是cls

    @classmethod
    def from_input(cls):
        return cls(input(), input())
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你的实现__str__是误导的。__str__应该以字符串形式返回对象的可视化,而不应该打印它。如果您想要某种类型的打印机,请添加具有该命名的方法,例如print_object. 或者,修复您的__str__then justprint(reader)或其他什么。

最后,类在 python 中通常是 CamelCased,所以它应该PersonReader不是Personreader. 虽然不清楚读取器部分的用途,但您的类只是一个人,可以顺便从输入中定义(通俗地说,读取器是可以从文件或类似文件的对象加载数据的对象,例如csv.reader,因此 aPersonReader将解析 a文件或类似文件的对象并加载一个或多个Person对象)。