Python3.7之组合
一、组合
代码复用的重要的方式除了继承,还有组合。
组合,在一个类中以另一个类的对象作为数据属性,称为类的组合。
class Equip: # 武器装备类
def fire(self):
print('release Fire skill')
class Riven: # 英雄Riven的类,一个英雄需要有装备,因而需要组合Equip类
camp = 'Noxus'
def __init__(self, nickname):
self.nickname = nickname
self.equip = Equip() # 用Equip类产生一个装备,赋值给实例的equip属性
r1 = Riven('锐雯雯')
r1.equip.fire() # 可以使用组合的类产生的对象所持有的方法
'''
release Fire skill
'''
二、组合和继承的使用场景
继承的方式
通过继承建立了派生类与基类之间的关系,它是一种'是'的关系,比如白马是马,人是动物。
class Animals:
def talk(self):
pass
class People(Animals):
def talk(self):
print('People is talking')
组合的方式
用组合的方式建立了类与组合的类之间的关系,它是一种‘有‘的关系,比如老师有生日,老师教python课程。
class Teacher:
def __init__(self, name, age, sex, course):
self.name = name
self.age = age
self.sex = sex
self.course = course
class Course:
def __init__(self, name, price):
self.name = name
self.price = price
course1 = Course('python', 3000)
teacher1 = Teacher('chaochao', 23, 'M', course1)
print(teacher1.course.name)
当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好。