簡體   English   中英

帶有內置輸入函數的類方法(Python)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM