定义一个图形管理器
功能1:保存所有图形
功能2:图形管理器提供计算所有图形总面积的功能,如能够计算:圆形 pi*r**2,矩形 长 * 宽
且要求增加新图形时,不影响图形管理器代码
#定义一个图形管理器类
class GraphicManager:
def __init__(self):
#存放所有图形
self.__list_graphic = []
#功能:让用户查看所有图形类别,只读
@property
def list_graphic(self):
return self.__list_graphic
#功能1:向列表中存放各种图形
def add_graphic(self,graphic):
#如果图形不是由图形父类创建出来的,引起异常
if not isinstance(graphic,Graphic):
raise ValueError()
else:
self.__list_graphic.append(graphic) #列表append()方法
#功能2:计算总面积
def calc_total_area(self):
total_area = 0
for item in self.__list_graphic:
total_area += item.calc_area()
return total_area
#定义一个图形父类(体现继承,依赖倒置)
class Graphic:
#功能:计算面积,怎么实现不需要写,让子类自己去泛化
def calc_area(self):
#确保子类重写父类的该方法,如果子类没有重写父类的这个方法,就会抛出异常
raise NotImplementedError()
#定义图形子类 -- 圆形
class Circle(Graphic): #继承自父类
def __init__(self,radius):
#实例变量radius:半径
self.radius = radius
#重写父类的计算面积方法(体现多态)
def calc_area(self):
area = 3.14 * self.radius ** 2
#定义图形子类 -- 矩形
class Rectangle(Graphic):
def __init__(self,length,width):
self.length = length
self.width = width
#重写父类计算面积的方法
def calc_area(self):
return self.length * self.width
c01 =Circle(5)
r01 = Rectangle(10,20)
manager = GraphicManager()
manager.add_graphic(c01) #类与类的组合使用
manager.add_graphic(r01)
print(manager.list_graphic)
print(manager.calc_total_area())