请老师们帮忙挑挑刺

来源:6-2 编程练习

jjboy

2021-07-11 22:17:01

题目中没有说,我想问不同类中的string()方法需要通过super关键字调用父类string()方法来实现吗,我只是简单按格式进行了输出。

# -*- coding: utf-8 -*-

"""
@author: mo
@contact:
@file: object_hw2.py
@time: 7/11/2021 9:47 PM
"""


class Point(object):

# 自定义Point类的构造(初始化)方法
def __init__(self, x, y):
self.x = x
self.y = y

# 自定义Point类对象的格式化输出函数(string())
def string(self):
print('该图形初始化点为{X:%d,Y:%d}' % (self.x, self.y))


class Circle(Point):

# 自定义Circle类的构造(初始化)方法
def __init__(self, x, y, radius):
super(Circle, self).__init__(x=x, y=y)
self.radius = radius

# 自定义Circle类对象的格式化输出函数(string())
def string(self):
print('该图形初始化点为{X: %d,Y: %d};{半径为 %d}' % (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: %d, Height: %d}' % (self.width, self.height))


class Rectangle(Point, Size):

# 自定义Rectangle类的构造(初始化)方法,并在方法中调用父类的初始化方法以完成初始化
# 注意在多重继承的时候使用Super关键字会造成歧义,这种情况下我们使用类名来进行调用
def __init__(self, x, y, width, height):
Point.__init__(self, x=x, y=y)
Size.__init__(self, width=width, height=height)

# 以下的调用方式会报错
# super(Rectangle, self).__init__(x=x, y=y)
# super(Rectangle, self).__init__(width=width, height=height)

# 自定义Rectangle类对象的格式化输出函数(string())
def string(self):
print('该图形初始化点为:{X: %d,Y: %d},长宽分别为:{Width: %d, Height: %d}' % (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
r = Rectangle(15, 15, 15, 15)
r.string()
# 实例化Rectangle对象,顶点位置(40,30),长和宽分别为11和14
r1 = Rectangle(40, 30, 11, 14)
r1.string()


写回答

1回答

好帮手慕凡

2021-07-12

同学,你好!

用不用都是可以的,但继承多个父类时,需要使用 父类名.方法名( ) 来调用不同父类中命名相同的方法。

祝学习愉快!

0

0 学习 · 4469 问题

查看课程