python以圆类为基础设计三维图形体系
import math
from abc import ABC, abstractmethod
三维图形功能接口
class ThreeDShape(ABC):
@abstractmethod
def perimeter(self):
"""计算周长"""
pass
@abstractmethod
def area(self):
"""计算面积"""
pass
@abstractmethod
def volume(self):
"""计算体积"""
pass
@abstractmethod
def display(self):
"""显示图形信息"""
pass
点类
class Point(ThreeDShape):
def init(self, x=0, y=0):
self.x = x
self.y = y
def set_coordinates(self, x, y):
"""设置坐标"""
self.x = x
self.y = y
def get_coordinates(self):
"""获取坐标"""
return (self.x, self.y)
def perimeter(self):
"""点没有周长,返回0"""
return 0
def area(self):
"""点没有面积,返回0"""
return 0
def volume(self):
"""点没有体积,返回0"""
return 0
def display(self):
"""显示点信息"""
print(f"点坐标: ({self.x}, {self.y})")
圆类(继承自点类)
class Circle(Point):
def init(self, x=0, y=0, radius=0):
super().init(x, y)
self.radius = radius
def set_radius(self, radius):
"""设置半径"""
self.radius = radius
def get_radius(self):
"""获取半径"""
return self.radius
def perimeter(self):
"""计算周长"""
return 2 * math.pi * self.radius
def area(self):
"""计算面积"""
return math.pi * self.radius ** 2
def volume(self):
"""圆没有体积,返回0"""
return 0
def display(self):
"""显示圆信息"""
print(f"圆信息 - 圆心: ({self.x}, {self.y}), 半径: {self.radius}")
print(f"周长: {self.perimeter():.2f}, 面积: {self.area():.2f}")
球类(继承自圆类)
class Sphere(Circle):
def perimeter(self):
"""球没有周长,返回0"""
return 0
def area(self):
"""计算表面积"""
return 4 * math.pi * self.radius ** 2
def volume(self):
"""计算体积"""
return (4 / 3) * math.pi * self.radius ** 3
def display(self):
"""显示球信息"""
print(f"球信息 - 中心: ({self.x}, {self.y}), 半径: {self.radius}")
print(f"表面积: {self.area():.2f}, 体积: {self.volume():.2f}")
圆柱类(继承自圆类)
class Cylinder(Circle):
def init(self, x=0, y=0, radius=0, height=0):
super().init(x, y, radius)
self.height = height
def set_height(self, height):
"""设置高度"""
self.height = height
def get_height(self):
"""获取高度"""
return self.height
def perimeter(self):
"""圆柱没有周长,返回0"""
return 0
def area(self):
"""计算表面积"""
base_area = super().area()
lateral_area = 2 * math.pi * self.radius * self.height
return 2 * base_area + lateral_area
def volume(self):
"""计算体积"""
return super().area() * self.height
def display(self):
"""显示圆柱信息"""
print(f"圆柱信息 - 底面中心: ({self.x}, {self.y}), 半径: {self.radius}, 高度: {self.height}")
print(f"表面积: {self.area():.2f}, 体积: {self.volume():.2f}")
圆锥类(继承自圆类)
class Cone(Circle):
def init(self, x=0, y=0, radius=0, height=0):
super().init(x, y, radius)
self.height = height
def set_height(self, height):
"""设置高度"""
self.height = height
def get_height(self):
"""获取高度"""
return self.height
def perimeter(self):
"""圆锥没有周长,返回0"""
return 0
def area(self):
"""计算表面积"""
base_area = super().area()
slant_height = math.sqrt(self.radius ** 2 + self.height ** 2)
lateral_area = math.pi * self.radius * slant_height
return base_area + lateral_area
def volume(self):
"""计算体积"""
return (1 / 3) * super().area() * self.height
def display(self):
"""显示圆锥信息"""
print(f"圆锥信息 - 底面中心: ({self.x}, {self.y}), 半径: {self.radius}, 高度: {self.height}")
print(f"表面积: {self.area():.2f}, 体积: {self.volume():.2f}")
测试代码
if name == "main":
print("=== 测试点类 ===")
p = Point(1, 2)
p.display()
print("\n=== 测试圆类 ===")
c = Circle(0, 0, 5)
c.display()
print("\n=== 测试球类 ===")
s = Sphere(0, 0, 5)
s.display()
print("\n=== 测试圆柱类 ===")
cy = Cylinder(0, 0, 3, 7)
cy.display()
print("\n=== 测试圆锥类 ===")
co = Cone(0, 0, 3, 7)
co.display()

浙公网安备 33010602011771号