Python关于类的问题

设计一个基类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)


希望这能帮到你!