python超级方法的问题

时间:2014-06-23 17:25:23

标签: python

我有这个问题: 我的超级班是:

class Regressionb(object):
    def __init__(self, Datamatrix, targets):
        self.X = Datamatrix
        self.y = targets

    def theta_X_product(self, theta, X):         
        return self.add_column_zero(X).dot(theta)

    def add_column_zero(self, X):
        m = len(X)
        return np.concatenate((np.ones([m,1],1]), X), axis = 1)

,我的孩子班:

from Regressionb import *

class LinearRegressionb(Regressionb):
    def __init__(self, Datamatrix, targets):
        Regressionb.__init__(self, Datamatrix, targets)
        #tryed also with        super().__init__(Datamatrix, targets)


    def hypothesis(self, theta):         
        return lambda X : Regressionb.theta_X_product(self, theta, X)
        #also tryed       return lambda X : super().theta_X_product(theta, X)

比我从控制台跑:

X = np.matrix([  [11, 12, 13, 14], [21, 22, 23, 24], [31, 32, 33, 34]])    
theta = np.matrix([1, 1, 1, 1, 1]).T

from LinearRegressionb import *
linear = LinearRegressionb(X, y)
h = linear.hypothesis(theta)

我收到错误:

hypothesis() takes exactly 1 argument (2 given)

我没看到我如何给出2个参数。我的错误在哪里?

1 个答案:

答案 0 :(得分:-3)

您的孩子班级应该如下:

class LinearRegressionb(Regressionb):
    def __init__(self, Datamatrix, targets):
        super(LinearRegressionb, self).__init__(Datamatrix, targets)


    def hypothesis(self, theta):         
        return lambda X : super(LinearRegressionb, self).theta_X_product(theta, X)

- 编辑 -

同意,虽然超级可能不是最好的事情,因为hypothesis没有被覆盖,但是不必要或者没有,这取决于程序员。这里的重点是恕我直言,如何从父类调用方法,以及使用super的正确语法,我演示了。不知道为什么我被投票支持。