zoukankan      html  css  js  c++  java
  • python类的组合

    python之类的组合

    1. 什么是组合
    组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象

    class Foo:
        xxx=111
        pass
    
    class Bar:
        yyy=222
        pass
    
    obj=Foo()
    obj.attr=Bar()
    
    obj.xxx
    obj.attr.yyy
    

      

    2. 为何要用组合
    通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以间接地将两个类关联/整合/组合到一起
    从而减少类与类之间代码冗余(目的)

    class Foo1:
        pass
    
    class Bar:
        pass
    
    obj_from_bar=Bar()
    obj1=Foo1()
    
    obj1.attr1=obj_from_bar(在obj1中增加了一个属性,名字为attr1,值为obj_from_bar(类Bar的对象))
    

      

    3. 如何用组合

    class OldboyPeople:
        school = 'Oldboy'
    
        def __init__(self,name,age,sex,):
            self.name = name
            self.age = age
            self.sex = sex
    
    class OldboyStudent(OldboyPeople):
        def __init__(self, name, age, sex,score=0):
            OldboyPeople.__init__(self,name,age,sex)
            self.score = score
    
        def choose_course(self):
            print('%s choosing course' % self.name)
    
    class OldboyTeacher(OldboyPeople):
        def __init__(self,name,age,sex,level):
        OldboyPeople.__init__(self,name,age,sex)
        self.level=level
    
        def score(self,stu,num):
            stu.score=num
    
    class Course:
        def __init__(self,c_name,c_price,c_period):
            self.c_name = c_name
            self.c_price = c_price
            self.c_period = c_period
    
        def tell_info(self):
            print('<课程名:%s 价钱:%s 周期:%s>' %(self.c_name,self.c_price,self.c_period))
    
    # 创建课程对象
    python=Course('python',1900,'5mons')
    java=Course('JAVA',1900,'4mons')
    
    
    stu1=OldboyStudent('刘二蛋',38,'male')
    stu1.course=python #这就是两个类的组合(在stu1这个对象里,加了一个属性,名字为course,值是另一个对象,这样就可以使用另一个对象里的属了)
    # print(stu1.__dict__)
    
    stu1.course.tell_info()
    
    tea1=OldboyTeacher('egon',18,'male',10)
    tea1.course=python
    # print(tea1.__dict__)
    tea1.course.tell_info()
    

      

    '''

     

  • 相关阅读:
    nginx系列之七:限流配置
    nginx系列之六:cache服务
    nginx系列之五: 负载均衡
    nginx系列之四:web服务器
    nginx系列之三:日志配置
    nginx系列之二:配置文件解读
    nginx系列之一:nginx入门
    [面试题]25个MySQL经典面试题
    常用的 Linux iptables 规则
    java new一个对象的过程中发生了什么
  • 原文地址:https://www.cnblogs.com/haiguixiansheng/p/9512744.html
Copyright © 2011-2022 走看看