从球体、圆柱体抽象出一个公共基类Container,类Container内定义两个类变量pi圆周率,total_area总表面积、两个未实现的方法。模拟实现一个容器类层次结构,子类要求实现父类的所有方法,并在主方法进行多态测试。
时间: 2023-12-14 14:38:15 浏览: 181
下面是一个可能的实现:
```python
class Container:
pi = 3.14
total_area = 0
def get_volume(self):
pass
def get_surface_area(self):
pass
class Sphere(Container):
def __init__(self, radius):
self.radius = radius
def get_volume(self):
return 4/3 * Container.pi * self.radius ** 3
def get_surface_area(self):
return 4 * Container.pi * self.radius ** 2
class Cylinder(Container):
def __init__(self, radius, height):
self.radius = radius
self.height = height
def get_volume(self):
return Container.pi * self.radius ** 2 * self.height
def get_surface_area(self):
return 2 * Container.pi * self.radius * (self.radius + self.height)
```
在这个实现中,`Container` 是一个抽象基类,定义了两个类变量 `pi` 和 `total_area`,以及两个抽象方法 `get_volume` 和 `get_surface_area`。`Sphere` 和 `Cylinder` 分别是 `Container` 的子类,实现了父类的所有方法。
在主方法中,可以进行多态测试:
```python
sphere = Sphere(5)
cylinder = Cylinder(3, 10)
print(f"Sphere volume: {sphere.get_volume()}")
print(f"Sphere surface area: {sphere.get_surface_area()}")
print(f"Cylinder volume: {cylinder.get_volume()}")
print(f"Cylinder surface area: {cylinder.get_surface_area()}")
```
输出:
```
Sphere volume: 523.3333333333334
Sphere surface area: 314.0
Cylinder volume: 84.78
Cylinder surface area: 94.24777960769379
```
可以看到,`Sphere` 和 `Cylinder` 的实例都可以调用 `get_volume` 和 `get_surface_area` 方法,表现出了多态的特性。
阅读全文