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()

posted @ 2025-05-20 20:07  skurar  阅读(11)  评论(0)    收藏  举报