我必须进行以下练习:
实现一个支持以下方法的类 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() 时,会出现错误。如何在我的班级中实现此用户输入?
您已定义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对象)。