(1)定义一个抽象类Shape,在抽象类Shape中定义求面积和周长的抽象方法getArea()、getPerimeter()。 (2)定义继承Shape的2个子类Triangle、Circle,并在这2个子类中重写父类Shape的2个方法getArea()、getPerimeter()。 (3)创建Triangle、Circle的对象,对2个子类中方法进行调用调试。
时间: 2024-02-03 14:12:33 浏览: 73
代码实现如下:
```python
from abc import ABC, abstractmethod
import math
class Shape(ABC):
@abstractmethod
def getArea(self):
pass
@abstractmethod
def getPerimeter(self):
pass
class Triangle(Shape):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def getArea(self):
p = (self.a + self.b + self.c) / 2
return math.sqrt(p * (p - self.a) * (p - self.b) * (p - self.c))
def getPerimeter(self):
return self.a + self.b + self.c
class Circle(Shape):
def __init__(self, r):
self.r = r
def getArea(self):
return math.pi * self.r ** 2
def getPerimeter(self):
return 2 * math.pi * self.r
# 测试
t = Triangle(3, 4, 5)
print("Triangle area:", t.getArea()) # 预期输出:Triangle area: 6.0
print("Triangle perimeter:", t.getPerimeter()) # 预期输出:Triangle perimeter: 12
c = Circle(2)
print("Circle area:", c.getArea()) # 预期输出:Circle area: 12.566370614359172
print("Circle perimeter:", c.getPerimeter()) # 预期输出:Circle perimeter: 12.566370614359172
```
解释:
- 定义抽象类Shape,其中定义求面积和周长的抽象方法getArea()、getPerimeter()。这里使用了Python内置的装饰器@abstractmethod,它表明这两个方法是抽象方法,必须在子类中实现。
- 定义继承Shape的两个子类Triangle、Circle,并在这两个子类中重写父类Shape的两个方法getArea()、getPerimeter()。Triangle类的面积和周长计算使用了海伦公式,Circle类的面积和周长计算使用了数学库中的pi常量。
- 创建Triangle、Circle的对象,对两个子类中方法进行调用调试。在测试时创建Triangle和Circle的对象,并对两个对象的方法进行调用,输出面积和周长的值。
阅读全文