6-1 设计Shape基类及Circle, Rectangle继承类(高教社,《Python编程基础及应用》习题9-7)分数 20

设计一个基类Shape,包括:

  1. 名为sName的属性(图形名称);

  1. 构造函数应对sName属性进行初始化。

设计Shape的继承类Rectangle, 包括:

  1. 长,宽两个属性;

  1. 构造函数调用Shape的构造函数,并初始化长,宽两个属性;

  1. getArea()成员函数计算并返回矩形面积。

设计Shape的继承类Circle,包括:

  1. 半径属性;

  1. 构造函数调用Shape的构造函数,并初始化半径属性;

  1. getArea()成员函数计算并返回圆形面积。

注意:请注意阅读测试样例程序以理解题目对类的接口的要求。

类接口定义:

classShape:       ...
classRectangle(Shape):     ...
classCircle(Shape):    ...

裁判测试程序样例:

s1 = Shape("shape0")
s = input()  #矩形名称w = float(input()) #矩形宽度h = float(input()) #矩形高度r1 = Rectangle(s,w,h)
s = input()  #圆的名称r = float(input()) #圆的半径c1 = Circle(s,r)
print(s1.sName)
print("矩形%s面积: %.2f" % (r1.sName,r1.getArea()))
print("圆形%s面积: %.2f" % (c1.sName,c1.getArea()))

输入样例:

Jupyter
12.1
9.9
Moon
3.3

输出样例:

shape0
矩形Jupyter面积: 119.79
圆形Moon面积: 34.21

答案之一:

import math    #导入math模块
class Shape:    #定义一个Shape类
    def __init__(self,sName):
        self.sName = sName
        self.__width = None
        self.__height = None
        self.__r = None


class Rectangle(Shape):
    def __init__(self,sName,width,height):
        self.sName = sName
        self.width = width
        self.height = height

    def getArea(self):
        return self.width * self.height


class Circle(Shape):
    def __init__(self,sName,r):
        self.sName = sName
        self.r = r


    def getArea(self):
        return self.r ** 2 * math.pi

执行结果

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 设计一个Shape基类,包含一个计算面积的方法area(),并定义两个继承CircleRectangleCircle继承Shape,包含一个半径属性和一个计算圆面积的方法area()。 Rectangle继承Shape,包含一个长和宽属性和一个计算矩形面积的方法area()。 具体代码如下: ```python class Shape: def area(self): pass class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius ** 2 class Rectangle(Shape): def __init__(self, length, width): self.length = length self.width = width def area(self): return self.length * self.width ``` 其中,Shape中的area()方法使用了pass占位符,表示该方法暂时不需要实现。CircleRectangle分别重写了area()方法,实现了计算圆和矩形面积的功能。 ### 回答2: Shape基类是一个抽象,它定义了所有形状的共同属性和方法。在该中定义了一个面积的计算方法,但由于不同的形状计算面积的方式不同,因此在Shape基类中该方法不进行实现,而是留下一个抽象方法。当子继承Shape基类时,必须实现这个方法才能使该子实例化。 下一步是定义CircleRectangle,它们都继承Shape基类Circle具有半径属性,而Rectangle具有长度和宽度属性。它们都重写Shape基类中的面积方法,并返回计算出的面积值,以及其他型所需的独有属性和方法。 设计一个基类的目的是使代码重用和可维护性更强。通过将相似的功能和属性放入一个基类中,我们可以在子中重写和添加功能而不必更改基类的实现。同时,在子中实现多态的概念使得我们可以使用相同的方法来处理不同的对象型,这进一步提高了代码的可维护性,并避免了重复的代码。在实验过程中,编写Shape基类及其继承CircleRectangle,将创建通用的形状,使程序可以创建并处理各种型的形状实例,从而扩展程序的功能和灵活性。 例如,在GUI开发中,我们通常需要绘制不同形状的对象,比如长方形、圆形、三角形等等。通过继承Shape基类,我们可以在不同的子中实现不同的绘制方法,从而展现多样化的图形效果。 ### 回答3: 题目描述: 设计一个Shape基类CircleRectangle继承,实现对图形的面积和周长的计算以及输出。 解题思路: 根据题目要求,我们需要设计一个Shape基类,和两个继承CircleRectangle。因为要求计算图形的面积和周长,所以在基类中定义一个计算图形面积的方法area()和一个计算图形周长的方法perimeter(),并在两个子中重写这个方法。 ``` class Shape: def area(self): pass def perimeter(self): pass class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius ** 2 def perimeter(self): return 2 * 3.14 * self.radius class Rectangle(Shape): def __init__(self, length, width): self.length = length self.width = width def area(self): return self.length * self.width def perimeter(self): return 2 * (self.length + self.width) ``` 在这段代码中,我们定义了Shape基类,其中的area()和perimeter()方法都为空,因为不同的子需要实现不同的计算方法。在CircleRectangle继承中,我们分别定义了__init__()方法来初始化对象的半径或长宽,并重写了Shape基类中的area()和perimeter()方法。 接下来,我们创建两个对象,并输出图形的面积和周长。代码如下: ``` if __name__ == '__main__': c = Circle(5) r = Rectangle(3, 4) print('圆形的面积:', c.area()) print('圆形的周长:', c.perimeter()) print('矩形的面积:', r.area()) print('矩形的周长:', r.perimeter()) ``` 在这段代码中,我们创建了一个Circle对象c和一个Rectangle对象r,并分别调用它们的area()和perimeter()方法来计算面积和周长,并输出结果。这里需要注意,我们可以直接使用对象名加点号的方式来调用继承的方法。 最后,运行代码,输出结果如下: ``` 圆形的面积: 78.5 圆形的周长: 31.400000000000002 矩形的面积: 12 矩形的周长: 14 ``` 结论: 本题要求设计Shape基类CircleRectangle继承,实现对图形的面积和周长的计算以及输出。我们在基类Shape中定义了计算图形面积的方法area()和计算图形周长的方法perimeter(),并分别在CircleRectangle继承中重写了这些方法。同时,我们创建了两个对象,调用了继承中的方法来计算面积和周长,并输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与自己赛跑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值