我是 Python 中面向物件編程思想的新手,學校給了我一個問題,首先要創建一個名為 " Mammal" 的類,具有屬性 " name" 和 method get_name()。因此我想出了這個:
class Mammal(object):
def __init__(self, name):
self.name = name
def get_name(self):
return self.name
好像沒問題。問題的下一部分要求我創建一個Dog具有相同名稱dog和相同方法的子類。出于對超類的繼承,我創建了:
class Dog(Mammal):
def __init__(self,name):
super().__init__(name)
Dog().get_name()我得到了輸出應該是的測驗用例Dog,但我一直收到錯誤TypeError: __init__() missing 1 required positional argument: 'name'。然后我嘗試將第二個代碼的第三行修改為
class Dog(Mammal):
def __init__(self,name):
super().__init__(Dog)
但錯誤仍然存??在。我在網上搜索了如何從超類繼承,似乎我的代碼結構是正確的,但我根本無法將名稱傳遞給"Dog"類以使其get_name()作業。
有人可以指出這對我有什么問題嗎?任何幫助是極大的贊賞!
uj5u.com熱心網友回復:
第一個例子
您指定輸入一個名稱來構造您的 Dog 子類
class Dog(Mammal):
def __init__(self,name): # <--- name parameter
super().__init__(Dog)
因此,如果要創建子類的實體,則必須提供名稱(隱含型別字串)。為此,您必須構建一個這樣的實體:
Dog("Berry").get_name()
然后,此代碼將回傳字串“Berry”,這是您在建構式中指定的名稱。
第二個例子
class Dog(Mammal):
def __init__(self,name): # <--- name is unused, so it can be removed
super().__init__(Dog)
你用你的子類 Dog 呼叫父建構式,所以如果你get_name()在那個實體上這樣做,它不會回傳字串“Dog”,但它會回傳 Dog 子類。
請記住,python 是真正動態的,如果型別不正確,它不會立即拋出錯誤,因此它會被解釋。我建議您閱讀更多關于類一般如何作業的資訊,以更好地理解常見原則以及它如何在您的代碼中受益。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/459980.html
