python# 4.对平面形体有长和面积,周长、面积应怎样计算(用什么方法)?要求实现运行时的多态性。请编程,并测试。 # 1.Shape正方形(Square) 长方形(Rectangle) 圆形(Circle) 圆环(Annulus)
时间: 2024-02-25 14:56:31 浏览: 66
下面是使用Python实现的代码:
```python
import math
class Shape:
def __init__(self, length):
self.length = length
def perimeter(self):
pass
def area(self):
pass
class Square(Shape):
def __init__(self, length):
super().__init__(length)
def perimeter(self):
return 4 * self.length
def area(self):
return self.length ** 2
class Rectangle(Shape):
def __init__(self, length, width):
super().__init__(length)
self.width = width
def perimeter(self):
return 2 * (self.length + self.width)
def area(self):
return self.length * self.width
class Circle(Shape):
def __init__(self, radius):
super().__init__(radius)
def perimeter(self):
return 2 * math.pi * self.length
def area(self):
return math.pi * self.length ** 2
class Annulus(Shape):
def __init__(self, outer_radius, inner_radius):
super().__init__(outer_radius)
self.inner_radius = inner_radius
def perimeter(self):
return 2 * math.pi * (self.length + self.inner_radius)
def area(self):
return math.pi * (self.length ** 2 - self.inner_radius ** 2)
# 测试
s = Square(5)
print("正方形的周长为:", s.perimeter()) # 20
print("正方形的面积为:", s.area()) # 25
r = Rectangle(3, 4)
print("长方形的周长为:", r.perimeter()) # 14
print("长方形的面积为:", r.area()) # 12
c = Circle(2)
print("圆形的周长为:", c.perimeter()) # 12.566370614359172
print("圆形的面积为:", c.area()) # 12.566370614359172
a = Annulus(5, 2)
print("圆环的周长为:", a.perimeter()) # 24.84955592153876
print("圆环的面积为:", a.area()) # 65.97344572538566
```
在这里,我们定义了一个 `Shape` 类作为所有形状的基类,并在其子类中实现了 `perimeter` 和 `area` 方法。这里使用了多态性,因为每个子类都实现了它们自己的版本,这些方法在运行时动态地绑定到每个对象上。然后我们创建了四个子类,分别表示正方形、长方形、圆形和圆环,并在每个子类中实现了 `perimeter` 和 `area` 方法。最后,我们进行了一些测试,以确保每个形状的周长和面积都被正确计算。
阅读全文