Python继承超级

时间:2014-08-16 05:11:18

标签: python inheritance

我有两个文件,每个文件都有不同的类。我的第一堂课的代码如下:

class Point:
    def __init__(self,x,y):
        self.x=x
        self.y=y

    def getX(self):
        return self.x

    def printInfo(self):
        print self.x,",",self.y

现在我有一个继承自Point的类Pixel:

from fileA import Point

class Pixel(Point):
    def __init__(self,x,y,color):
        #Point.__init__(self,x,y)     //works just fine
        super(Pixel,self).__init__()
        self.color=color

    def printInfo(self):
        super(Pixel,self).printInfo()
        print self.color

因此,您可以看到Pixel继承自Point,它会覆盖printInfo方法。我在这里有两个问题,首先在Pixel的构造函数中,评论的行工作正常,但是带有super的版本会抛出错误。此外,当我想从printInfo方法调用基类的printInfo时,它会抛出另一个错误。我的问题是如何在构造函数和重写方法中使用super,以便它可以工作?

我使用的是Python 2.7,错误是TypeError:必须是type,而不是classobj

由于

1 个答案:

答案 0 :(得分:3)

首先,您只能将super用于新式类,但Point目前是旧式类。要使它成为新式类,它必须从object继承:

class Point(object):
    def __init__(self,x,y):
        self.x=x
        self.y=y

    def getX(self):
        return self.x

    def printInfo(self):
        print self.x,",",self.y

其次,当您使用Point.__init__调用时,您必须传递super期望的参数,就像您直接使用Point.__init__(self,...)一样:

class Pixel(Point):
    def __init__(self,x,y,color):
        super(Pixel,self).__init__(x, y)  # Don't forget x,y
        self.color=color

    def printInfo(self):
        super(Pixel,self).printInfo()
        print self.color