面向对象三大特性之组合

一、简介

'''
什么是组合
    组合指的是一个对象拥有某一个属性,该属性的值是另一个类的对象
为何要用组合
    为了减少代码冗余
'''

二、利用组合减少代码冗余

# 背景
class Company:
    def __init__(self, c_name, address):
        self.name = c_name
        self.address = address


class Department:
    def __init__(self, d_name, project):
        self.name = d_name
        self.project = project


class Staff(Company, Department):
    def __init__(self, username, age, sex, c_name, address, d_name, project):
        self.name = username
        self.age = age
        self.sex = sex
        Company.__init__(self, c_name, address)
        Department.__init__(self, d_name, project)


# userinfo = Staff('fred', '26', 'male', 'haymaker', 'shanghai', 'sa', 'The Walker')
# 以上代码是子类通过指明道姓的方式,调用了父类的__init__()方法,但显然代码还是不够简洁


# 利用组合改进


class Company:
    def __init__(self, name, address):
        self.name = name
        self.address = address


class Department:
    def __init__(self, name, project):
        self.name = name
        self.project = project


class Staff(Company, Department):
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex


# 创建公司信息
haymaker = Company('haymaker', 'shanghai')

# 创建部门信息
sa = Department('sa', 'The Walker')

# 创建员工信息
userinfo = Staff('fred', '26', 'male')
# 将部门和公司信息绑定给员工,生成员工信息 userinfo.company = haymaker userinfo.department = sa print(''' <姓名:%s 年龄:%s 性别:%s 公司:%s 公司地址:%s 部门:%s 负责产品:%s> ''' % (userinfo.name, userinfo.age, userinfo.sex, userinfo.company.name, userinfo.company.address, userinfo.department.name, userinfo.department.project)) print(userinfo.company.__dict__) print(userinfo.department.__dict__) # 利用面向对象的组合特性,上面的背景下,只要实例化出公司和部门,所有员工都可以绑定改对象,作为自己属性的值
原文地址:https://www.cnblogs.com/lichunke/p/9518036.html