运用Python建立一个图形类,要求下分平面与立体两大类,平面类以正方形为基类,拓展出三角形、矩形和圆形。立体类以立方体为基类,拓展出长方体与球体
时间: 2024-04-21 08:22:08 浏览: 17
可以根据您的要求创建一个图形类,如下所示:
```python
import math
class Shape:
def __init__(self, name):
self.name = name
def area(self):
pass
def perimeter(self):
pass
class Plane(Shape):
def __init__(self, name):
super().__init__(name)
class Square(Plane):
def __init__(self, name, side_length):
super().__init__(name)
self.side_length = side_length
def area(self):
return self.side_length ** 2
def perimeter(self):
return 4 * self.side_length
class Triangle(Plane):
def __init__(self, name, base, height):
super().__init__(name)
self.base = base
self.height = height
def area(self):
return 0.5 * self.base * self.height
def perimeter(self):
# Assuming it is an equilateral triangle
return 3 * self.base
class Rectangle(Plane):
def __init__(self, name, length, width):
super().__init__(name)
self.length = length
self.width = width
def area(self):
return self.length * self.width
def perimeter(self):
return 2 * (self.length + self.width)
class Circle(Plane):
def __init__(self, name, radius):
super().__init__(name)
self.radius = radius
def area(self):
return math.pi * self.radius ** 2
def perimeter(self):
return 2 * math.pi * self.radius
class Solid(Shape):
def __init__(self, name):
super().__init__(name)
class Cube(Solid):
def __init__(self, name, side_length):
super().__init__(name)
self.side_length = side_length
def volume(self):
return self.side_length ** 3
def surface_area(self):
return 6 * (self.side_length ** 2)
class Cuboid(Solid):
def __init__(self, name, length, width, height):
super().__init__(name)
self.length = length
self.width = width
self.height = height
def volume(self):
return self.length * self.width * self.height
def surface_area(self):
return 2 * (self.length * self.width + self.length * self.height + self.width * self.height)
class Sphere(Solid):
def __init__(self, name, radius):
super().__init__(name)
self.radius = radius
def volume(self):
return (4 / 3) * math.pi * (self.radius ** 3)
def surface_area(self):
return 4 * math.pi * (self.radius ** 2)
```
这个示例代码中,我们创建了一个基类 `Shape`,它包含了图形的名称,并定义了两个抽象方法 `area()` 和 `perimeter()`。然后,我们创建了两个子类 `Plane` 和 `Solid`,分别表示平面图形和立体图形。
在平面图形中,我们创建了正方形 `Square`、三角形 `Triangle`、矩形 `Rectangle` 和圆形 `Circle` 四个子类。这些子类分别继承了平面图形的基类,并实现了各自的面积和周长计算方法。
在立体图形中,我们创建了立方体 `Cube`、长方体 `Cuboid` 和球体 `Sphere` 三个子类。这些子类同样继承了立体图形的基类,并实现了各自的体积和表面积计算方法。
您可以根据需要使用这些类来创建各种平面和立体图形的对象,并调用相应的方法计算其面积和周长(或体积和表面积)。