抽象一个能表示水平等腰梯形的trapezoid类,再设计一个测试类,联合使用其他形状类一起测试
时间: 2024-10-13 16:02:46 浏览: 27
基于C#的抽象类别详解
在Python中,我们可以抽象出一个名为`Trapezoid`的类来表示水平等腰梯形。这个类将包含一些基本属性,如上底、下底长度(`top`和`bottom`)、高(`height`),以及一些方法来计算面积和周长。同时,为了体现多态,我们可能会让这个类从一个更基础的`Shape`类派生出来。
```python
class Shape:
def __init__(self):
pass
def area(self):
raise NotImplementedError("Subclass must implement this method")
def perimeter(self):
raise NotImplementedError("Subclass must implement this method")
class Trapezoid(Shape):
def __init__(self, top, bottom, height):
self.top = top
self.bottom = bottom
self.height = height
def area(self):
return (self.top + self.bottom) * self.height / 2
def perimeter(self):
return self.top + self.bottom + 2 * self.height
# 测试类TestShapes
import unittest
class TestShapes(unittest.TestCase):
def test_trapezoid_area(self):
trapezoid = Trapezoid(4, 6, 5)
self.assertAlmostEqual(trapezoid.area(), 25)
def test_trapezoid_perimeter(self):
trapezoid = Trapezoid(4, 6, 5)
self.assertEqual(trapezoid.perimeter(), 19)
def test_inheritance(self):
# 测试Trapezoid是否实现了Shape的抽象方法
trapezoid = Trapezoid(4, 6, 5)
self.assertIsNotNone(getattr(Trapezoid, 'area', None))
self.assertIsNotNone(getattr(Trapezoid, 'perimeter', None))
if __name__ == '__main__':
unittest.main()
```
在这个例子中,`TestShapes`类包含了对`Trapezoid`类的一些测试,比如计算面积和验证是否实现了抽象方法。通过这种方式,你可以轻松地添加更多形状类并联合测试它们,体现了多态的优势。
阅读全文