先上概念:
组合是通过将不同的类或模块组合在一起,创建一个新的类来实现的机制。这意味着一个类的对象可以包含其他类的对象作为其部分,通过组合这些部分来实现整体的功能。
交通工具的烦恼
话说时间到3030年了,风陵苑交通协会委员(交通工具类)会决定不再为各个交通工具分配轮胎,其他标准依旧会保留,让各交通工具制造商自行解决。
class Vehicle():def __init__(self, color, speed, num):# 交通工具都有的属性self.color = color # 颜色self.speed = speed # 时速self.num= num# 轮胎数量
这天“汽车(car类)”、“自行车(Bicycle类)”在咖啡店碰面,一起商讨如何对抗汽车协会的不作为行为。汽车首先说话了"我需要的轮胎特殊,以前制作汽车只需要从交通协会指定的汽车轮胎工厂(之前的这是继承)拿就行了。现在为了控制成本 ,真的是脸都不要了"。自行车随声附和道:“9494,哎!!!“。就在这时,在隔壁喝咖啡的轮胎(Tyre类)听到了,内心却十分的激动,没想到3000来年的准备,终于守得云开见日出,众里寻他千百度,得来全不费工夫。只见轮胎快速移动了隔壁,并开始推销起来,我们公司能提供各种各样的轮胎,价格可谈,价格可谈,尺寸可定制。
class Vehicle():def __init__(self, color, speed, num):# 交通工具都有的属性self.color = color # 颜色self.speed = speed # 时速self.num= num# 轮胎数量class Tyre(): # 轮胎def __init__(self, size, price):self.size = sizeself.price = priceclass Car(Vehicle):# 汽车交通工具def __init__(self, color, speed, num):# 汽车继承交通工具所需要的参数super().__init__(color, speed, num)'''直接实例化对象'''self.tyre = Tyre('20inch', 1000) # 汽车类指定的轮胎self.consume = num*self.tyre.price # 总价格self.size = self.tyre.size # 尺寸class Bicycle(Vehicle):# 自行车交通工具def __init__(self, color, speed, num):# 自行车继承交通工具所需要的参数super().__init__(color, speed, num)'''直接实例化对象'''self.tyre = Tyre('24inch', 200) # 自行车类指定的轮胎self.consume = num*self.tyre.price # 总价格self.size = self.tyre.size # 尺寸
汽车说到:”轮胎,你别只会吹牛,先来个样品试试“,轮胎:”小样“。
car = Car('green', '120km/h', 4)#-->car.__dict__{'color': 'red','speed': '120km/h','num': 4,'tyre': <__main__.Tyre at 0x2736b7eba50>,'consume': 4000,'size': '20inch'}
自行车说到:”我也来一个试试看“
bicycle = Bicycle('yellow', '60km/h', 2)
#-->bicycle.__dict__{'color': 'yellow','speed': '60km/h','num': 2,'tyre': <__main__.Tyre at 0x2736b7e9690>,'consume': 400,'size': '24inch'}
轮胎自豪的说到,”怎么样?只要你们需要明确,再也不用去看那破交通协会的脸了,记得帮我也给飞机,高贴家推销推销,有打折扣“
汽车,自行车说到:"安排"