共计 1399 个字符,预计需要花费 4 分钟才能阅读完成。
一. 什么是类的组合
组合就是, 一个类或一个类的对象中的某一个属性, 这个属性是另一个类的对象
二. 为什么使用组合
用来解决类与类之间代码冗余的问题 (代码重用性)
三. 组合与继承的区别
组合和继承都是有效的利用已有类的资源的重要方式, 但二者的概念和使用场景不同
1. 继承方式
- 继承是一种 "是" (属于) 的关系, 诗人是人, 歌星是人, 当类之间有很多相同的之处,应该使用继承
# 人类
class Person:
def __init__(self,name,age,sex):
self.name =name
self.age = age
self.sex = sex
def run(self):
print(f"{self.name}跑起来 ")
# 歌星类
class Start(Person):
def sing(self):
print(" 唱歌 ")
# 诗人类
class Poet(Person):
def write(self):
print(" 写诗 ")
S1 = Start(" 毛不易 ",25,"man")
P1 = Poet(" 李白 ",10000,"man")
S1.run() # 毛不易跑起来
P1.run() # 李白跑起来
2. 组合方式
- 组合是一种 "有" 的关系, 例:我有工作、有房子, 银行卡有转账、存储功能, 我可以拥有一张银行卡作为我的组件
- 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
🍔下面这个例子就是 "bank" 类的对象作为一个组件放置在其他类或其他类的对象中, 成为他们的属性
🍔示例讲解 : 餐厅里有个员工和老板, 老板给员工发工资, 员工办了张卡来收工资
class People:
school = " 蟹堡王餐厅 "
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
class Staff(People): # 员工
bank_card = {} # 银行卡 {xx 银行: 余额}
def sell(self):
print(f"{self.name}正在卖蟹堡 ")
def apply_catd(self,card_name): # 办银行卡
self.bank_card[card_name] = 0
print(f"{self.name}办了一张 {card_name} 卡 ")
class Boss(People): # 老板
def payoff(self,obj,obj_card_name,money):
obj.bank_card.update({obj_card_name:money})
print(f" 老板 {self.name} 给{obj.name}的 {obj_card_name} 卡打了 {money} 元工资 ")
class Bank: # 出卡的类
def __init__(self,bank_name):
self.bank_name = bank_name
# 实例出银行卡
card1 = Bank(" 蟹堡银行 ")
# 实例出一个员工
S1 = Staff(" 派大星 ",35,"man")
# 实例老板
B1 = Boss(" 姗姗 ",30,"woman")
# 员工办卡
S1.apply_catd(card1.bank_name)
# 老板给员工发工资
B1.payoff(S1," 蟹堡银行 ",300)
# 查看员工的工资卡字典
print(S1.bank_card)
''' 执行输出
派大星办了一张蟹堡银行卡
老板姗姗给派大星的蟹堡银行卡打了 300 元工资
{'蟹堡银行': 300}
'''
正文完