super().__init__()的使用问题

super().__init__()的使用问题

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()


正在回答 回答被采纳积分+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)

http://img1.sycdn.imooc.com//climg/5ccfa7e50001a14808020601.jpg

问题2:super().__init__(x, y)#而这里保留却不会报错?

解决方案:由于Circle类中有引用了父类Point中的x,y变量,所以这里不可省略。

http://img1.sycdn.imooc.com//climg/5ccfaaa20001911806830425.jpg

如果我的回答解决了你的疑惑,欢迎采纳!!^_^ 祝学习愉快~~~~~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师