python创建一个父类 Shape,包含一个方法 area(),在其中抛出 NotImplementedError。创建两个子类 Circle 和 Rectangle,分别实现 area() 方法以计算圆和矩形的面积。编写测试代码验证多态性。
时间: 2024-12-25 09:35:30 浏览: 6
首先,在Python中,我们可以按照以下步骤创建一个多态结构:
1. 定义一个父类 `Shape`,并包含一个未实现的方法 `area()`:
```python
class Shape:
def __init__(self):
raise NotImplementedError("Subclasses should implement the area method.")
def area(self):
return self.calculate_area()
def calculate_area(self):
"""This method is meant to be overridden by subclasses."""
pass
```
在这个父类中,`calculate_area()` 是一个虚方法,它会在实际操作时被子类覆盖。
2. 创建两个子类 `Circle` 和 `Rectangle`,分别实现 `area()` 方法:
```python
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def calculate_area(self):
return 3.14 * (self.radius ** 2)
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def calculate_area(self):
return self.width * self.height
```
3. 测试代码,利用多态性验证:
```python
def test_shape_areas():
circle = Circle(5)
rectangle = Rectangle(4, 6)
try:
print(f"Circle area: {circle.area()}") # 使用父类引用调用子类方法
print(f"Rectangle area: {rectangle.area()}")
except NotImplementedError:
print("Area calculation works as expected using polymorphism.")
test_shape_areas()
```
运行上述测试代码会得到圆和矩形的面积,并展示了多态性,因为尽管我们使用的是 `Shape` 类型的引用,但实际调用了各自子类的 `area()` 方法。
阅读全文