super().__init__()的使用问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | class Point( object ): # 自定义Point类的构造(初始化)方法 def __init__( self , x, y): #super().__init__()为什么这里如果不注释会报错 self .x = x self .y = y # 自定义Point类对象的格式化输出函数(string()) def string( self ): print ( '{X:{0},Y:{1}}' . format ( self .x, self .y)) class Circle(Point): # 自定义Circle类的构造(初始化)方法 def __init__( self , x, y, radius): super ().__init__(x, y) #而这里保留却不会报错? self .radius = radius # 自定义Circle类对象的格式化输出函数(string()) def string( self ): # print('该图形初始化点为:{X:{0},Y:{1}};{半径为:{2}}'.format(self.x, self.y, self.radius)) print ( "该图形初始化点为:{{X:{0}, Y:{1}}};{{半径为:{2}}}" . format ( self .x, self .y, self .radius)) class Size( object ): # 自定义Size类的构造(初始化)方法 def __init__( self , width, height): super ().__init__() self .width = width self .height = height # 自定义Size类对象的格式化输出函数(string()) def string( self ): # print('{Width:{0},Height:{1}}'.format(self.width, self.height)) print ( "{{Width:{0}, Height:{1}}}" . format ( self .width, self .height)) class Rectangle(Point, Size): def __init__( self , x, y, width, height): # super().__init__(x, y, width, height) Point.__init__( self , x, y) Size.__init__( self , width, height) # 自定义Rectangle类的构造(初始化)方法,并在方法中调用父类的初始化方法以完成初始化 # 自定义Rectangle类对象的格式化输出函数(string()) def string( self ): # print('该图形初始化点为:{X:{0}, Y:{1}}; 长宽分别为:{Width:{2}, Height:{3}}'.format(self.x, self.y, self.width, self.height)) print ( "该图形初始化点为:{{X:{0}, Y:{1}}}; 长宽分别为:{{Width:{2}, Height:{3}}}" . format ( self .x, self .y, self .width, self .height)) if __name__ = = "__main__" : # 实例化Circle对象,圆心为(5,5),半径为8 c = Circle( 5 , 5 , 8 ) c.string() # 实例化Rectangle对象,顶点位置(15,15),长和宽分别为15和15 r1 = Rectangle( 15 , 15 , 15 , 15 ) r1.string() # 实例化Rectangle对象,顶点位置(40,30),长和宽分别为11和14 r2 = Rectangle( 40 , 30 , 11 , 14 ) r2.string() |
5
收起
正在回答 回答被采纳积分+1
1回答
慕猿梦
2019-05-06 11:31:57
同学,你好,
问题1:#super().__init__()为什么这里如果不注释会报错
解决方案:当调用Point.__init__(self, x, y)方法时,执行了Point类中的super().__init__(),已经找到了满足条件的__init__()方法,python解释器将不会向后执行Size.__init__(self, width, height)
问题2:super().__init__(x, y)#而这里保留却不会报错?
解决方案:由于Circle类中有引用了父类Point中的x,y变量,所以这里不可省略。
如果我的回答解决了你的疑惑,欢迎采纳!!^_^ 祝学习愉快~~~~~
1.Python零基础入门
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧