zoukankan      html  css  js  c++  java
  • 面向对象三大特性之组合

    一、简介

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

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

    # 背景
    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__) # 利用面向对象的组合特性,上面的背景下,只要实例化出公司和部门,所有员工都可以绑定改对象,作为自己属性的值
  • 相关阅读:
    CentOS 6.5/6.6 安装mysql 5.7 最完整版教程
    linux下的find文件查找命令与grep文件内容查找命令
    为mongodb数据库增加用户名密码权限
    mac 用密钥远程登陆
    MongoDB导入导出以及数据库备份
    ubuntu12.04上的mongodb卸载
    在Ubuntu下进行MongoDB安装步骤
    slice,substr和substring的区别
    再议js的传递和深复制
    js 参数传递
  • 原文地址:https://www.cnblogs.com/lichunke/p/9518036.html
Copyright © 2011-2022 走看看