定义抽象类Shape,包含getArea( )和getPerimeter( )两个抽象方法 (1)定义Rectangle类表示矩形,继承Shape类,实现其中的getPerimeter()方法和getArea()方法。 (2)定义Square类表示正方形,继承Shape类,实现其中的getPerimeter()方法和getArea()方法。 (3)编写测试程序:随机生成10个边长小于100的Rectangle或Square的随机对象,分别输出所有图形的面积之和与周长之和。
时间: 2024-03-25 15:40:28 浏览: 24
好的,以下是代码实现:
```python
import random
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def getArea(self):
pass
@abstractmethod
def getPerimeter(self):
pass
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def getArea(self):
return self.width * self.height
def getPerimeter(self):
return 2 * (self.width + self.height)
class Square(Rectangle):
def __init__(self, side):
super().__init__(side, side)
# 测试程序
shapes = []
for i in range(10):
if random.choice([True, False]):
shapes.append(Rectangle(random.randint(1, 99), random.randint(1, 99)))
else:
shapes.append(Square(random.randint(1, 99)))
total_area = 0
total_perimeter = 0
for shape in shapes:
total_area += shape.getArea()
total_perimeter += shape.getPerimeter()
print("10个形状的面积之和为:", total_area)
print("10个形状的周长之和为:", total_perimeter)
```
代码解释:
1. 定义抽象类 `Shape`,包含 `getArea()` 和 `getPerimeter()` 两个抽象方法。
2. 定义 `Rectangle` 类表示矩形,继承自 `Shape` 类,并实现其中的 `getPerimeter()` 和 `getArea()` 方法。
3. 定义 `Square` 类表示正方形,继承自 `Rectangle` 类,并重写了构造函数,使得正方形的宽和高相等。
4. 编写测试程序,随机生成10个边长小于100的 `Rectangle` 或 `Square` 对象,并分别计算所有图形的面积之和与周长之和,最后输出结果。
注意:在抽象类中定义的抽象方法必须在子类中被实现,否则子类也会成为抽象类。在本例中,`Rectangle` 和 `Square` 类都必须实现 `getArea()` 和 `getPerimeter()` 方法。