Python继承问题的super函数求助
求高人指点,以下代码运行后,令line = Line(),运行后报错,需要我再次输入X1,Y1,X2,Y2的值,是不是super函数只继承父类的方法,而不继承结果呢?import math
class Point():
def __init__(self,X1,Y1,X2,Y2):
self.X1 = X1
self.Y1 = Y1
self.X2 = X2
self.Y2 = Y2
print("A的坐标是%d,%d" % (self.X1,self.Y1))
print("B的坐标是%d,%d" % (self.X2,self.Y2))
class Line(Point):
def __init__(self):
super().__init__()
def getLen(self):
AB_product = (self.X1 - self.X2)**2 + (self.Y1 - self.Y2)**2
self.AB = math.sqrt(AB_product)
print("直线AB的长是%d" % self.AB) 本帖最后由 疾风怪盗 于 2020-9-22 23:18 编辑
你的Point()类里,就没给x,y传值
实例化line=Point()的时候也是报错,没传值,就没有结果
如果有传值,不就行了么?
import math
class Point():
def __init__(self):
self.X1 = 1
self.Y1 = 2
self.X2 = 3
self.Y2 = 4
print("A的坐标是%d,%d" % (self.X1, self.Y1))
print("B的坐标是%d,%d" % (self.X2, self.Y2))
class Line(Point):
def __init__(self):
super().__init__()
def getLen(self):
AB_product = (self.X1 - self.X2) ** 2 + (self.Y1 - self.Y2) ** 2
self.AB = math.sqrt(AB_product)
print("直线AB的长是%d" % self.AB)
line=Line()
line.getLen()
一:字类继承父类如果重写了 __init__,就会重写覆盖父类的 __init__ 方法
二:如果继承父类后用 super().__init__() 调用了超类方法,那么父类需要传的参数子类也要
三:如果在父类中给定了初始值,那么子类继承后可以传参,也可以不传参
{:10_257:}{:10_257:} 给你写了注释,第三行是父类的初始化函数,需要四个参数。
在第13行的时候,你调用了父类的初始化函数,但是却没有给参数,所以就报错了
import math
class Point():
def __init__(self,X1,Y1,X2,Y2):# 这里是父类的初始化函数,需要四个参数
self.X1 = X1
self.Y1 = Y1
self.X2 = X2
self.Y2 = Y2
print("A的坐标是%d,%d" % (self.X1,self.Y1))
print("B的坐标是%d,%d" % (self.X2,self.Y2))
class Line(Point):
def __init__(self):
super().__init__() # 这里调用父类的初始化函数,因父类初始化函数需要四个参数,所以这里必须传参,否则就会报错
def getLen(self):
AB_product = (self.X1 - self.X2)**2 + (self.Y1 - self.Y2)**2
self.AB = math.sqrt(AB_product)
print("直线AB的长是%d" % self.AB) import math
class Point():
def __init__(self, X1, Y1, X2, Y2):# 这里是父类的初始化函数,需要四个参数
self.X1 = X1
self.Y1 = Y1
self.X2 = X2
self.Y2 = Y2
print("A的坐标是%d,%d" % (self.X1, self.Y1))
print("B的坐标是%d,%d" % (self.X2, self.Y2))
def doing(self):
print('你很有钱吗?')
class Line(Point):
def __init__(self,X1,Y1,X2,Y2):
super().__init__(X1,Y1,X2,Y2)# 这里调用父类的初始化函数,因父类初始化函数需要四个参数,所以这里必须传参,否则就会报错
def getLen(self):
AB_product = (self.X1 - self.X2) ** 2 + (self.Y1 - self.Y2) ** 2
self.AB = math.sqrt(AB_product)
print("直线AB的长是%d" % self.AB)
def doing(self):
print('我很有钱还学这干嘛。。。')
a =Point(1,2,3,4)
a.doing()
print('----------')
line=Line(5,6,7,8)
line.getLen()
line.doing()
子类里写入父类的4各参数后,ok的
父类和子类加入同样一个名字的函数,子类调用的时候,优先级是子类覆盖父类。 感谢各位大佬的解答!
页:
[1]