老师,我这里为啥不能用super().

老师,我这里为啥不能用super().

相关代码:

# coding:utf-8

class Point(object):
# 自定义Point类的构造(初始化)方法
def __init__(self, x, y):
self.x = x
self.y = y
# 自定义Point类对象的格式化输出函数(string())
def string(self):
print('{X: %s, Y: %s}' % (self.x, self.y))
class Circle(Point):
# 自定义Circle类的构造(初始化)方法
def __init__(self, x, y, radius):
super(Circle, self).__init__(x, y)
self.radius = radius
# 自定义Circle类对象的格式化输出函数(string())
def string(self):
print('该图形初始点为:{X: %s, Y: %s};{半径为: %s}' %
(self.x, self.y, self.radius))
class Size(object):
# 自定义Size类的构造(初始化)方法
def __init__(self, width, height):
self.width = width
self.height = height
# 自定义Size类对象的格式化输出函数(string())
def string(self):
print('{Width: %S, Height: %s}' % (self.width, self.height))
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: %s, Y: %s};长宽分别为: {Width: %s, Height: %s}' %
(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(x=15, y=15, width=15, height=15)
r1.string()
# 实例化Rectangle对象,顶点位置(40,30),长和宽分别为11和14
r2 = Rectangle(x=40, y=30, width=11, height=14)
r2.string()

问题描述:这里为啥不能用super,

相关代码:

class Rectangle(Point, Size):
# 自定义Rectangle类的构造(初始化)方法,并在方法中调用父类的初始化方法以完成初始化
def __init__(self, x, y, width, height):
super().__init__(self, x, y)
super().__init__(self, width, height)
# 自定义Rectangle类对象的格式化输出函数(string())
def string(self):
print('该图形初始化点为: {X: %s, Y: %s};长宽分别为: {Width: %s, Height: %s}' %
(self.x, self.y, self.width, self.height))

问题描述:而只能用相关Point, Size父类引用

相关代码:

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: %s, Y: %s};长宽分别为: {Width: %s, Height: %s}' %
(self.x, self.y, self.width, self.height))


正在回答

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

1回答

同学,你好!Rectangle类继承了Point和Size两个父类,当继承多个父类时,使用super()只会调用第一个父类的方法,调用多个父类的构造方法需要使用父类名.__init__()的方式。

祝:学习愉快!

  • 慕莱坞9224999 提问者 #1

    那只继承一个父类的时候呢,可以用父类名.__init__()的方式吗?

    我试了一下代码,它是报错的。是不是只继承一个父类的时候只能用super函数?

    2021-05-15 12:24:18
  • 好帮手慕燕燕 回复 提问者 慕莱坞9224999 #2

    同学,你好!只继承一个父类,可以使用类名.__init__()方式,可参考以下写法:

    http://img1.sycdn.imooc.com//climg/609f62d1093de4b305720150.jpg

    祝:学习愉快!

    2021-05-15 13:57:49
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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