彩虹然

rainbow-ran

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)

当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好。

posted @ 2020-01-17 11:16  彩虹然  阅读(332)  评论(0编辑  收藏  举报