python3
(二)、以圆类为基础设计三维图形体系
【题目描述】设计三维图形类体系,要求如下:
设计三维图形功能接口,接口包含周长、面积、体积计算方法;
基于以上接口,首先定义点类,应包含x,y坐标数据成员,坐标获取及设置方法、显示方法等;
以点类为基类派生圆类,增加表示半径的数据成员,半径获取及设置方法,重载显示函数,并可计算周长和面积等;
以圆类为基础派生球类、圆柱类、圆锥类;要求派生类球、圆柱、圆锥中都含有输入和输出显示方法;并可计算面积、周长。
程序中定义各种类的对象,并完成测试。
【源代码程序】
from math import pi
# 三维图形功能接口
class IThreeDimensionalShape:
def calculate_perimeter(self):
pass
def calculate_area(self):
pass
def calculate_volume(self):
pass
# 点类
class Point:
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 display(self):
print("Point: ({}, {})".format(self.x, self.y))
# 圆类
class Circle(Point, IThreeDimensionalShape):
def __init__(self, x=0, y=0, radius=0):
super().__init__(x, y)
self.radius = radius
def calculate_perimeter(self):
return 2 * pi * self.radius
def calculate_area(self):
return pi * self.radius**2
def display(self):
print("Circle - Radius: {}".format(self.radius))
super().display()
# 球类
class Sphere(Circle):
def display(self):
print("Sphere - Radius: {}".format(self.radius))
super().display()
# 圆柱类
class Cylinder(Circle):
def __init__(self, x=0, y=0, radius=0, height=0):
super().__init__(x, y, radius)
self.height = height
def calculate_volume(self):
return self.calculate_area() * self.height
def display(self):
print("Cylinder - Radius: {}, Height: {}".format(self.radius, self.height))
super().display()
# 圆锥类
class Cone(Circle):
def __init__(self, x=0, y=0, radius=0, height=0):
super().__init__(x, y, radius)
self.height = height
def calculate_volume(self):
return (1/3) * self.calculate_area() * self.height
def display(self):
print("Cone - Radius: {}, Height: {}".format(self.radius, self.height))
super().display()
# 测试类的对象
if __name__ == "__main__":
p = Point(1.0, 2.0)
c = Circle(3.0, 4.0, 5.0)
s = Sphere(6.0, 7.0, 8.0)
cy = Cylinder(9.0, 10.0, 11.0, 12.0)
co = Cone(13.0, 14.0, 15.0, 16.0)
p.display()
c.display()
s.display()
cy.display()
co.display()
print("Circle Perimeter:", c.calculate_perimeter())
print("Circle Area:", c.calculate_area())
print("Cylinder Volume:", cy.calculate_volume())
print("Cone Volume:", co.calculate_volume())