• day 21


    1.组合:某一各个对象拥有一个属性,该属性值等于另一个类的对象
    为何要有组合:通过为某一个对象添加属性的方法,可以间接的将两个类关联起来,整合到一起,从而减少代码的日冗余

    class OldboyPeople:
        shcool="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
            self.course=[]
    
        def choose_course(self):
            print("%s chooseing course "% (self.name))
    
        def tell_all_course(self):
            print("学生:%s的课程"%(self.name))
            for obj in self.course:
                obj.tell_info()
    
    class OldoyTeacher(OldboyPeople):
        def __init__(self,name,age,sex,level):
            OldboyPeople.__init__(self,name,age,sex)
            self.level=level
            self.courses = []
    
        def score(self,stu,num):
            stu.num=num
        def tell_all_course(self):
            print("教师:%s 教授的课程如下"%(self.name))
            for obj in self.courses:
                obj.tell_info()
    
    class Course:
        def __init__(self,c_name,c_price,c_peroid):
            self.c_name=c_name
            self.c_price=c_price
            self.c_peroid=c_peroid
    
        def tell_info(self):
            print("<课程名:%s 价格:%s 周期:%s>" %(self.c_name,self.c_price,self.c_peroid))
    
    
    python=Course("Python全栈开发",1000,"5.5个月")
    Linux=Course("Linux运维",1000,'5.5')
    
    
    stu=OldboyStudent("jxl",18,'')
    stu.course.append(python)
    stu.course.append(Linux)
    stu.tell_all_course()
    
    
    te=OldoyTeacher("jxl1",19,'',10)
    te.courses.append(python)
    te.tell_all_course()
    .多态与多态性:
    多态:同一类事物的不同形状
    为何要用多态:
    多态性:在多态的背景下,可以不再考虑对象的具体类型的前提下,直接使用对象
    多态的精髓:统一
    注:父类只是用来建立规范的,不能用来实例化,更无须实现内部的方法
    Python 崇尚鸭子类型
     import  abc
    class Aminal(metaclass=abc.ABCMeta):
        @abc.abstractmethod
        def speak(self):
            print("Aminal-1111")
        def run(self):
            print("Aminal-222")
    class Dog(Aminal):
        def speak(self):
            print("dog-1111")
        def run(self):
            print("dog-2222")
    
    dog=Dog()
    dog.run()
    三.封装:
    装:往容器/名称空间里存放名字
    封:指的是将存放在名称空间的名字给藏起来,这种隐藏对外不对内

    如何封装:在类定义的属性前面,加__开头(没有__结尾)

    总结:
    1.__开头的属性实现的隐藏仅仅只是一种预语法意义上的变形,并不会真的限制类外部的访问
    2.该变形操作只在类定义阶段检验语法是发生一次,类定义阶段之后新增的__开头的属性不会变形
    3.如果父类不想让子类覆盖自己的属性,可以砸属性前加__开头

    封装数据属性:将数据属性隐藏起来,类外部就无法直接操作属性,需要类内开辟一个接口来给外部使用间接的操作属性,可以在接口内定义任意的控制逻辑

    封装函数的属性:隔离复杂度
    class A:
        def __f1(self):
            print("a.f1")
        def f2(self):
            print("a.f2")
            self.__f1()   #>>obj._A__f1()
    
    class B(A):
        def __f1(self):
            print("b.f1")
    
    b=B()
    b.f2()
    
    
    
    class  People:
        def __init__(self,name,age):
            self.__name=name
            self.__age=age
    
        def tell_info(self):
            print("名字:%s,年龄:%s" %(self.__name,self.__age))
    
        def set_inf(self,name,age):
            if not type(name)==str:
                print("名字的类型为str")
                return
            if not type(age)==int:
                print("年龄的类型为int")
                return
            self.__name=name
            self.__age=age
    
    p=People("jxl",18)
    p.tell_info()
    p.set_inf("jxl1",13)
    p.tell_info()
    四.property:是一种装饰器,用来将类中的属伪装成数据属性
    class People:
        def __init__(self,name,weith,height):
            self.name=name
            self.weith=weith
            self.height=height
    
        @property
        def amd(self):
           return self.weith/(self.height**2)
    
    
    
    p=People('jxl',60,1.7)
    print(p.amd)
  • 相关阅读:
    ClickHouse之访问权限控制
    ClickHouse之集群搭建以及数据复制
    ClickHouse之简单性能测试
    ClickHouse之初步认识
    从完整备份恢复单个innodb表
    MHA快速搭建
    MySQL 5.7最新版本的2个bug
    Greenplum各种Tips(不定时更新)
    MySQL 5.7贴心参数之binlog_row_image
    TCP窗口机制与流量控制
  • 原文地址:https://www.cnblogs.com/jxl123/p/9512114.html
Copyright © 2020-2023  润新知