- 形状面积计算
- 代码:
import math
class Shape:
def __init__(self,name): #构造
self.name=name
def area(self):
pass
def getname(self):
return self.name
class Square(Shape):
def __init__(self,name,length):
super().__init__("square")
self.__length=length
def area(self):
return self.__length**2
class Circle(Shape):
def __init__(self,namne,r):
super().__init__("circle")
self.__r=r
def area(self):
return self.__r**2*math.pi
s=Square('square',4)
print(f"正方形的面积为{s.area()}")
c=Circle('circle',2)
print(f"圆形的面积为{c.area()}")
def s1(shape):
print(f"{shape.getname()}的面积为{shape.area()}")
s1(s)
s1(c)
shapes=[s,c]
for shape in shapes:
print(f"{shape.getname()}的面积为{shape.area()}")
- 截图:
- 分析:
首先,代码导入了math模块,这个模块提供了数学相关的函数,本代码中主要用它来获取圆周率π。
接着定义了一个基类Shape,它代表一个形状。这个类有三个方法:
__init__:构造函数,用于初始化形状的名称。
area:一个占位方法,用于在子类中实现具体的面积计算逻辑。在Shape类中它不执行任何操作。
getname:返回形状的名称。
然后,定义了两个从Shape类继承的子类:Square和Circle。
Square类代表正方形,它有两个方法:
__init__:构造函数,除了调用父类的构造函数设置名称为"square"外,还接受一个参数length表示正方形的边长,并将其保存为私有属性__length。
area:重写了父类的同名方法,用于计算正方形的面积,即边长的平方。
Circle类代表圆,它也有两个方法:
__init__:构造函数,调用父类的构造函数设置名称为"circle",并接受一个参数r表示圆的半径,将其保存为私有属性__r。
area:重写了父类的同名方法,用于计算圆的面积,即π乘以半径的平方。
接下来,代码创建了Square和Circle的实例,并分别打印出它们的面积。这是通过调用各自实例的area方法来实现的。
之后,定义了一个函数s1,它接受一个shape对象作为参数,并打印出该形状的名称和面积。这个函数展示了多态性的应用,因为它可以接受任何Shape类型的对象,并调用其getname和area方法。
然后,使用s1函数分别打印了正方形和圆的名称和面积。
最后,代码创建了一个包含正方形和圆对象的列表shapes,并通过一个循环遍历这个列表,打印出每个形状的名称和面积。