[英]Class method with built-in input function (Python)
我必須進行以下練習:
實現一個支持以下方法的類 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)
但是,當我嘗試調用 Personreader.from_input(x) 或 Personreader.from_input() 時,會出現錯誤。 如何在我的班級中實現此用戶輸入?
您已將from_input
定義為常規方法,這意味着它的第一個參數始終是self
(無論您給它起什么名字),並且必須在實例上調用它或隨實例一起提供。
要使from_input
成為替代構造函數(這似乎是此處的意圖),您應該通過用@classmethod
裝飾它來使其成為類方法。 在這種情況下,(第一個)參數的名稱應該是cls
例如
@classmethod
def from_input(cls):
return cls(input(), input())
順便說一句,您對__str__
的實現是錯誤的。 __str__
應該以字符串形式返回對象的可視化,而不應該打印它。 如果您想要某種類型的打印機,請添加具有該命名的方法,例如print_object
。 或者,修復你的__str__
然后只是print(reader)
或其他什么。
最后,類在 python 中通常是 CamelCased,所以它應該是PersonReader
而不是Personreader
。 雖然不清楚reader部分的用途,但您的類只是一個人,可以順便從輸入中定義(通俗地說, reader是可以從文件或類似文件的對象(例如csv.reader
加載數據的對象,因此PersonReader
將是解析文件或類似文件的對象並加載一個或多個Person
對象的東西)。
我同意@Masklinn 給出的回答中提到的觀點
這是您可以使用的方法
class PersonReader:
def __init__(self, name, year):
self.name = name
self.year = year
@staticmethod
def from_input():
return PersonReader(input(),input())
@classmethod
def __str__(self):
return str(self.name)+" ("+str(self.year)+")" #output as per required
p1 = PersonReader.from_input() #create person from input
print(p1.name) # name
print(p1.year) # year
print(p1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.