我創建了一個「動物」類,它接受參數name
和colour
以及一個名爲「Pig」的子類,它應該繼承name
和colour
來自「Animal」,但也應該採用新參數TailType
。Python超級構造函數 - 你把哪些參數放在子方法中?
這是我到目前爲止已經完成:
class Animal(object):
def __init__(self, name, colour):
self.name = name
self.colour = colour
def get_name(self):
return self.name
def set_name(self, newName = ""):
self.name = newName
def set_colour(self, newColour = ""):
self.colour = newColour
def get_colour(self):
return self.colour
def __str__(self):
return self.get_name() + ' : ' + self.colour
class Pig(Animal):
def __init__(self, name, colour, tailType):
super().__init__()
self.tailType = tailType
當我初始化的「豬」類,我不知道哪些參數放在__init__
定義;應該是name
和colour
或name
+ colour
+ tailType
?
另外,這個子類繼承了Animal的__str__
表示方法,還是我必須在「Pig」子類中再次編寫它?
我真的不確定哪些參數去哪裏,當我初始化一個子類。我看了一些例子,它們都有一個非常簡單的例子(self)。
如果我嘗試做
john = Pig('John', 'pink', 'curly')
我得到
TypeError: __init__() missing 2 required positional arguments: 'name' and 'colour'
。
超類和子類在概念上是有意義的,但是當涉及到處理它們的語法時,我真的很掙扎。
請注意:請不要向我介紹什麼是超類構造函數的一般解釋:我已經閱讀了很多,並且還不知道如何在這種情況下應用它們。
問題不在於孩子類的參數,而在於*你沒有將它們傳遞給*。 'super().__ init __(put,them,here)'。請注意,它在回溯中向您顯示此特定線路是有原因的。另外請注意,你不應該用Python編寫getter和setter。 – jonrsharpe
無論使用哪個參數,都可以傳遞超類構造函數。 – user2357112
當'__init__'使用'super'時需要非常小心。當你從'Pig .__ init__'中調用'super().__ init(name,color)'時,你無法知道MRO中的下一個類是否真的需要參數來定義'__init__'。 – chepner