为什么这个地方只能用父类调用,却不能用super调用呢

为什么这个地方只能用父类调用,却不能用super调用呢

class Rectangle(Point, Size):


    # 自定义Rectangle类的构造(初始化)方法,并在方法中调用父类的初始化方法以完成初始化

    def __init__(self,x,y,width,height):

        Point.__init__(self,x,y)

        Size.__init__(self,width,height)

        

    # 自定义Rectangle类对象的格式化输出函数(string())

    def string(self):

        print("该图形初始化点为:{{X:{0}, Y:{1}}}; 长宽分别为:{{Width:{2}}},Height:{3}}}".format(self.x,self.y,self.width,self.height))


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好:

都是使用super方法调用的,调用的方法不同而已。

继承父类的三种写法:

1、父类名.父类方法(self):父类名.__init__(self,*args,*kwargs) 


2、super(子类名,self).父类方法():python2和python3中都可以使用,如果需要参数,则需要传参。

3、super().父类方法():仅在python3中使用,子类名和self是可以不写的。

由于按照同学的想法,直接使用super调用__init__方法,无法分辨是那一个父类的构造方法,因此使用父类名.父类方法(self):父类名.__init__(self,*args,*kwargs) ,可以根据类名识别出继承父类的构造函数。

如果我解决了同学的问题,请采纳!学习愉快^_^。

  • Akien 提问者 #1
    那意思就是说 多重继承是不能使用super的吗?
    2019-09-23 18:29:02
好帮手乔木 2019-09-24 10:47:09

同学你好:

1 多重继承首先需要一个共同的原始父类

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

A为原始父类,B、C继承A,D继承B,C,-->D继承A,形成了一个闭合。

本练习没有构成闭合的条件。

2  由于python多重继承遵循mro(method resolution order)方法解析顺序,python3使用的新式的继承方式,广度优先检索。

当使用super按照继承列表中的顺序从左向右检索到需要继承的方法后将停止继续检索。

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

由于B1中有构造函数,因此直接检索并继承B1中的构造函数后停止。

因此同学必须使用类名.__init__()方式去继承父类的构造函数。

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

如果我解决了同学的问题,请采纳!学习愉快^_^。

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

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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