2015-08-14 93 views
0

時,我有一個父母類中定義爲:類型錯誤創建子類

class Alpha(X, Y, metaclass=abc.ABCMeta): 

    def __init__(self, time_series : pandas.Series): 
     super(Alpha, self).__init__() 

而且我有它的子類:

class Beta(Alpha): 
    def __init__(self, returns: [daily_returns_object]): 
     super(Beta, self).__init__() 
     self.calibrate(returns) 

我試着按照創建Beta對象:

#returns_list has been defined but is irrelevant here 
beta_obj = Beta(returns_list) 

我收到錯誤TypeError:__init__() missing one positional argument: 'time_series'。因此,我寫了beta_obj = Beta(time_series, returns_list),但後來得到錯誤TypeError:__init__() takes 2 positional arguments but 3 were given

+0

你'Beta'只接受'returns'但你'Alpha'接受sonly'time_series'。你真的想傳遞什麼?如果你只將'returns'傳遞給Beta,它應該怎麼知道要將'time_series'傳遞給'Alpha'的內容? – BrenBarn

回答

1

您在這裏調用Alpha.__init__方法:

super(Beta, self).__init__() 

,但你是不是在要求time_series參數傳遞那裏。

如果這是Beta花費太多,你需要將它添加到您的Beta.__init__定義參數,然後把它傳遞:

class Beta(Alpha): 
    def __init__(self, time_series: pandas.Series, returns: [daily_returns_object]): 
     super(Beta, self).__init__(time_series) 
     self.calibrate(returns) 
+0

謝謝。因此,'time_series:pandas.Series'需要傳遞給'Beta''__init __()'那麼還是沒有必要? – Jojo

+1

@FixIncome:'Beta .__ init__'代替'Alpha .__ init__'。通過使用'super()'__init __()'你可以調用它,所以當你調用它的時候你需要滿足該方法所需的參數。最好的辦法是讓「Beta」接受你傳遞的額外論據。 –