2015-08-14 87 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”接受你传递的额外论据。 –