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

本文介绍了如何使用Python实现一个面向对象的编程模型,定义了一个基类`Shape`,以及三个派生类`Triangle`、`Circle`和`Rectangle`。每个类都包含了面积和周长的计算方法,通过实例化不同形状的对象来演示了多态性的应用。代码示例展示了如何计算三角形、圆形和矩形的面积和周长。
摘要由CSDN通过智能技术生成

编写代码,定义一个形状基类,有 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)符合要求且正确


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值