我有两个文件,每个文件都有不同的类。我的第一堂课的代码如下:
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
由于
答案 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