2016-07-22 32 views
1

我在問這個問題,因爲我在Google上搜索過的每一個頁面似乎都轉化爲過於簡單的案例或隨機討論超出範圍的細節。如何在Python 2.7中使用super()和參數?

class Base: 
    def __init__(self, arg1, arg2, arg3, arg4): 
     self.arg1 = arg1 
     self.arg2 = arg2 
     self.arg3 = arg3 
     self.arg4 = arg4 

class Child(Base): 
    def __init__(self, arg1, arg2, arg3, arg4, arg5): 
     super(Child).__init__(arg1, arg2, arg3, arg4) 
     self.arg5 = arg5 

這是我試過的。我被告知我需要使用類型而不是classobj,但我不知道這意味着什麼,Google也沒有幫助。

我只是想讓它工作。在Python 2.7中這樣做的正確做法是什麼?

+0

的可能的複製[Python的超()會引發類型錯誤(http://stackoverflow.com/questions/489269/python-super-raises-typeerror) – Jokab

回答

6

您的基類必須繼承object(新樣式類),並且super的調用應爲super(Child, self)

你也不應該通過arg5Base__init__

class Base(object): 
    def __init__(self, arg1, arg2, arg3, arg4): 
     self.arg1 = arg1 
     self.arg2 = arg2 
     self.arg3 = arg3 
     self.arg4 = arg4 

class Child(Base): 
    def __init__(self, arg1, arg2, arg3, arg4, arg5): 
     super(Child, self).__init__(arg1, arg2, arg3, arg4) 
     self.arg5 = arg5 
+0

如果基類沒有從繼承對象? – user6596353

+0

不,我的意思是人們是如何做舊風格的? – user6596353

+1

@ user6596353使用類名稱,但這不是推薦的方法:'Base .__ init __(arg1,arg2,arg3,arg4)' – DeepSpace