2015-08-14 2 views
0

У меня есть класс родители определяется как:TypeError при создании SubClass

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' принимать сытные 'time_series'. Что вы на самом деле хотите передать? Если вы только передаете 'return' в 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 __() 'вы все равно вызываете его, поэтому вам нужно выполнить требуемые параметры для этого метода, когда вы его вызываете. Лучший способ сделать это - «Бета» принять дополнительный аргумент, который вы передаете. –