Python:定义一个形状基类,并在其下定义子类,计算面积和周长

编写代码,定义一个形状基类,有 2 个属性:面积和周长,以及两个无返回值的方法:area()和 perimeter(),分别计算形状的面积和周长,从基类派生出三个子类:三角形、矩形、圆,重载基类的两个方法。

这种方法是重写并不是重载

class Shape:
    def __init__(self,areas = 0,perimeters = 0):
        self.areas = areas
        self.perimeters = perimeters
        #给shape赋予面积和周长变量

    def area():
        pass
   		 #定义area函数,不进行操作

    def perimeter():
        pass
		#定义周长函数,不进行操作
    
class Triangle(Shape):
    def __init__(self, a_side = 0, b_side = 0, c_side = 0,areas = 0, perimeters = 0):
        super().__init__(areas, perimeters)
        self.a_side = a_side
        self.b_side = b_side
        self.c_side = c_side
		#定义子类三角形,赋予都有属性三边长,同时给予默认值0防止报错
        
    def area(self):
        s = (self.a_side + self.b_side + self.c_side) / 2
        self.areas = (s * (s-self.a_side) * (s-self.b_side) * (s-self.c_side))**0.5
        #求三角形的面积
        
    def perimeter(self):
         self.perimeters = self.a_side + self.b_side + self.c_side
         #求周长

class Circle(Shape):
    def __init__(self, radius = 0, areas = 0, perimeters = 0):
        super().__init__(areas, perimeters)
        self.radius = radius
        #定义子类圆,同时赋予独有属性半径,给予其默认值

    def area(self):
        self.areas = 3.14 * (self.radius**2)

    def perimeter(self):
        self.perimeters = 2 * 3.14 * self.radius
   		 #分别求面积周长并付给对应值
        

class Rectangle(Shape):
    def __init__(self, length = 0, wideth = 0, areas = 0, perimeters = 0):
        super().__init__(areas, perimeters)
        self.length = length
        self.wideth = wideth
        #定义子类矩形,独有属性长和宽,默认值均为零

    def area(self):
        self.areas = self.length * self.wideth

    def perimeter(self):
        self.perimeters = 2 * (self.length + self.wideth)
        #分别求面积和周长


#测试
        
a1 = Triangle(3,4,5)
a1.area()
a1.perimeter()
print(a1.areas)
print(a1.perimeters)
#三角形(3,4,5)符合要求且正确

a2 = Circle(5)
a2.area()
a2.perimeter()
print(a2.areas)
print(a2.perimeters)
#圆(5)符合要求且正确

a3 = Rectangle(34)
a3.area()
a3.perimeter()
print(a3.areas)
print(a3.perimeters)
#矩形(3,4)符合要求且正确

这次采取增加3个变量,并进行判断一次进行函数的重载

class Shape:
    def __init__(self,a_side = 0,b_side = 0,c_side = 0,areas = 0,perimeters = 0):
        self.areas = areas
        self.perimeters = perimeters
        self.a_side = a_side
        self.b_side = b_side
        self.c_side = c_side
        #给shape赋予面积和周长变量
        #同时给定三个变量,形状为圆时取第一个变量为半径,以此类推来进行判断和使用

    def area(self):
        if self.b_side == 0 and self.c_side == 0:
            self.areas = (3.14 * (self.a_side**2))
            #进行圆面积的计算
        elif self.b_side != 0 and self.c_side == 0:
            self.areas = self.a_side * self.b_side
            #进行矩形的计算
        else:
            s = (self.a_side + self.b_side + self.c_side) / 2
            self.areas = (s * (s-self.a_side) * (s-self.b_side) * (s-self.c_side))**0.5
            #三角形

    def perimeter(self):
        if self.b_side == 0 and self.c_side == 0:
            self.perimeters = 2 * 3.14 * self.a_side
        elif self.b_side != 0 and self.c_side == 0:
            self.perimeters = 2 * (self.a_side + self.b_side)
        else:
            self.perimeters = self.a_side + self.b_side + self.c_side     
		#定义周长函数,同面积一样分别进行判断和计算
    
class Triangle(Shape):
    def __init__(self, a_side = 0, b_side = 0, c_side = 0,areas = 0, perimeters = 0):
        super().__init__(a_side,b_side,c_side,areas, perimeters)
        
		#定义子类三角形,赋予都有属性三边长,同时给予默认值0防止报错
        
    def __area__(self):
        pass
        #重载三角形的面积函数
        
    def __perimeter__(self):
         pass
         #重载周长函数

class Circle(Shape):
    def __init__(self, a_side = 0, b_side = 0, c_side = 0, areas = 0, perimeters = 0):
        super().__init__(a_side,b_side,c_side,areas, perimeters)

    def __area__(self):
        pass
    #重载面积

    def __perimeter__(self):
        pass
   		 #重载周长
        
class Rectangle(Shape):
    def __init__(self, a_side = 0,b_side = 0,c_side = 0, areas = 0, perimeters = 0):
        super().__init__(a_side,b_side,c_side,areas, perimeters)

    def __area__(self):
        pass
    #重载面积

    def __perimeter__(self):
        pass
        #重载周长


#测试
        
a1 = Triangle(3,4,5)
a1.area()
a1.perimeter()
print(a1.areas)
print(a1.perimeters)
#三角形(3,4,5)符合要求且正确

a2 = Circle(5)
a2.area()
a2.perimeter()
print(a2.areas)
print(a2.perimeters)
#圆(5)符合要求且正确

a3 = Rectangle(3,4)
a3.area()
a3.perimeter()
print(a3.areas)
print(a3.perimeters)
#矩形(3,4)符合要求且正确


  • 26
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,下面是一个可以计算、三角形、长方形面积周长的类的示例代码: ```python import math class Shape: def __init__(self): pass class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return math.pi * self.radius ** 2 def perimeter(self): return 2 * math.pi * self.radius class Triangle(Shape): def __init__(self, base, height, side1, side2, side3): self.base = base self.height = height self.side1 = side1 self.side2 = side2 self.side3 = side3 def area(self): return 0.5 * self.base * self.height def perimeter(self): return self.side1 + self.side2 + self.side3 class Rectangle(Shape): def __init__(self, length, width): self.length = length self.width = width def area(self): return self.length * self.width def perimeter(self): return 2 * (self.length + self.width) ``` 在这个示例代码中,我们定义了一个`Shape`基类,然后分别定义了形、三角形和长方形子类。每个子类中都有`area`和`perimeter`方法,用于计算对应形状面积周长。我们可以通过实例化这些类来计算不同形状面积周长,例如: ```python circle = Circle(5) print("Circle area:", circle.area()) print("Circle perimeter:", circle.perimeter()) triangle = Triangle(3, 4, 5, 4, 3) print("Triangle area:", triangle.area()) print("Triangle perimeter:", triangle.perimeter()) rectangle = Rectangle(2, 6) print("Rectangle area:", rectangle.area()) print("Rectangle perimeter:", rectangle.perimeter()) ``` 输出结果为: ``` Circle area: 78.53981633974483 Circle perimeter: 31.41592653589793 Triangle area: 6.0 Triangle perimeter: 12 Rectangle area: 12 Rectangle perimeter: 16 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值