设计一个基类Shape,该类包括3个属性:图形名称(name)、图形面积(area)、图形周长(perimeter)。该类包含 3 个成员函数:calArea(),计算并返回该图形面积。 calPerimeter,计算并返回该图形的周长。Display(),打印输出图形的名称,周长,面积。设计3个派生类:Rectangle,Triangle,Circle。请为派生类定义合适的数据成员用于表达其结构,派生类应重载实现基类中的全部成员函数
```python
#!/user/bin/env python3
# -*- coding: utf-8 -*-
import math
class Shape:
name = None
area = None
perimeter = None
def calArea(self):
return self.area
def calPerimeter(self):
return self.perimeter
def Display(self):
print(self.name)
print(self.calArea())
print(self.calPerimeter())
class Rectangle(Shape):
name = "矩形"
def __init__(self, length, width):
self.length = length
self.width = width
def calArea(self):
self.area = self.length * self.width
return self.area
def calPerimeter(self):
self.perimeter = (self.length + self.width) * 2
return self.perimeter
def Display(self):
print("该图形的名字是:", self.name)
print("面积为:", self.calArea())
print("周长为:", self.calPerimeter())
class Triangle(Shape):
name = "三角形"
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def calArea(self):
p = self.calPerimeter() / 2
self.area = math.sqrt(p * (p - self.a) * (p - self.b) * (p - self.c))
return self.area
def calPerimeter(self):
self.perimeter = self.a + self.b + self.c
return self.perimeter
def Display(self):
print("该图形的名字是:", self.name)
print("面积为:", self.calArea())
print("周长为:", self.calPerimeter())
class Circle(Shape):
name = "圆形"
def __init__(self, radius):
self.radius = radius
def calArea(self):
self.area = math.pi * self.radius * self.radius
return self.area
def calPerimeter(self):
self.perimeter = 2 * math.pi * self.radius
return self.perimeter
def Display(self):
print("该图形的名字是:", self.name)
print("面积为:", self.calArea())
print("周长为:", self.calPerimeter())
retangle = Rectangle(3, 2)
retangle.Display()
triangle = Triangle(3, 4, 5)
triangle.Display()
circle = Circle(1)
circle.Display()
```
import math
class Shape:
def __init__(self,name,area,perimeter):
self.name = name
self.area = area
self.perimeter = perimeter
def calArea(self):
return self.area
def calPerimeter(self):
return self.perimeter
def Display(self):
print(self.name,self.perimeter,self.area)
class Rectangle(Shape):
def __init__(self,name,height,width):
self.name = name
self.height = height
self.width = width
def calArea(self):
self.area = self.height*self.width
return self.area
def calPerimeter(self):
self.perimeter = self.height*2+self.width*2
return self.perimeter
def Display(self):
self.calPerimeter()
self.calArea()
print(self.name, self.perimeter, self.area)
class Triangle(Shape):
def __init__(self,name,height,bottom,left,right):
self.name = name
self.height = height
self.bottom = bottom
self.left = left
self.right = right
def calArea(self):
self.area = 0.5*self.height*self.bottom
return self.area
def calPerimeter(self):
self.perimeter = self.bottom+self.left+self.right
return self.perimeter
def Display(self):
self.calPerimeter()
self.calArea()
print(self.name, self.perimeter, self.area)
class Circle(Shape):
def __init__(self,name,radius):
self.name = name
self.radius = radius
def calArea(self):
self.area = math.pi*(self.radius**2)
return self.area
def calPerimeter(self):
self.perimeter = 2*math.pi*self.radius
return self.perimeter
def Display(self):
self.calPerimeter()
self.calArea()
print(self.name, self.perimeter, self.area)
s = Circle('圆形',3)
s.Display()
import math
class Shape:
def __init__(self,name):
self.name=name
@property
def area(self):
return self.calArea()
@property
def perimeter(self):
return self.calPerimeter()
def calArea(self):
...
def calPerimeter(self):
...
def Display(self):
print(self.name,self.perimeter,self.area)
class Rectangle(Shape):
def __init__(self,name,width,height):
super(name)
self.width=width
self.height=height
def calArea(self):
return self.width*self.height
def calPerimeter(self):
return self.width*2+self.height*2
class Triangle(Shape):
def __init__(self,name,a,b,c):
super(name)
self.a=a
self.b=b
self.c=c
def calArea(self):
p=self.perimeter/2
return (p*(p-self.a)*(p-self.b)*(p-self.c))**0.5
def calPerimeter(self):
return self.a+self.b+self.c
class Circle(Shape):
def __init__(self,name,r):
super(name)
self.r=r
def calArea(self):
return math.pi*self.r**2
def calPerimeter(self):
return 2*math.pi*self.r
基类 Shape 的定义可能如下所示:
class Shape:
def __init__(self, name):
self.name = name
self.area = 0
self.perimeter = 0
def get_name(self):
return self.name
def get_area(self):
return self.area
def get_perimeter(self):
return self.perimeter
def cal_area(self):
raise NotImplementedError()
def cal_perimeter(self):
raise NotImplementedError()
def display(self):
print("Shape:", self.name)
print("Area:", self.area)
print("Perimeter:", self.perimeter)
派生类 Rectangle 的定义可能如下所示:
class Rectangle(Shape):
def __init__(self, name, width, height):
super().__init__(name)
self.width = width
self.height = height
def get_width(self):
return self.width
def get_height(self):
return self.height
def cal_area(self):
self.area = self.width * self.height
def cal_perimeter(self):
self.perimeter = 2 * (self.width + self.height)
def display(self):
super().display()
print("Width:", self.width)
print("Height:", self.height)
派生类 Triangle 的定义可能如下所示:
class Triangle(Shape):
def __init__(self, name, side1, side2, side3):
super().__init__(name)
self.side1 = side1
self.side2 = side2
self.side3 = side3
def get_side1(self):
return self.side1
def get_side2(self):
return self.side2
def get_side3(self):
return self.side3
def cal_area(self):
s = (self.side1 + self.side2 + self.side3) / 2
self.area = math.sqrt(s * (s - self.side1) * (s - self.side2) * (s - self.side3))
def cal_perimeter(self):
self.perimeter = self.side1 + self.side2 + self.side3
def display(self):
super().display()
print("Side 1:", self.side1)
print("Side 2:", self.side2)
print("Side 3:", self.side3)
派生类 Circle 的定义可能如下所示:
class Circle(Shape):
def __init__(self, name, radius):
super().__init__(name)
self.radius = radius
def get_radius(self):
return self.radius
def cal_area(self):
self.area = math.pi * self.radius * self.radius
def cal_perimeter(self):
self.perimeter = 2 * math.pi * self.radius
def display(self):
super().display()
print("Radius:", self.radius)
希望这能帮到你!