• python全栈脱产第25天------组合、多态、封装、property装饰器


    一、组合

      定义:组合指的是一个对象属性的值是另一个类的对象

      用途:通过某一对象添加属性(属性的值时另一个类的对象)的方式,可以间接地将两个类关联/整合/组合到一起,从而减少代码冗余

      用法:

        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):

            super().__init__(name,age,sex)

            self.score=score

            self.courses=[]

          def choose_course(self):

            print('%s choosing course' %self.name)

          def tell_all_course(self):

            print(('学生[%s]选修的课程如下' %self.name).center(50,'='))

            for obj in self.course:

              obj.tell_info()

            print('='*60)

        class OldboyTeacher(OldboyPeople):

          def __init__(self,name,age,sex,level):

            super().__init__(name,age,sex)

            self.level=level

            self.courses=[]

          def score(self,stu,num)

            score.stu=num

          def tell_all_course(self):

            print(('老师[%s]教授的课程如下' %self.name).center(50,'*'))

            for obj in self.course:

              obj.tell_info()

            print('*'*70)

        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_period))

        python=Course('python全栈开发',1900,'5mons')

        linux=Course('linux架构师',900,'3mons')

        stu1=OldboyStudent('刘二蛋',38,'male')

        stu1.courses.append(python)

        stu1.courses.append(linux)

        stu1.tell_all_course()

        tea1=OldboyTeacher('egon',18,'male')

        tea1.courses.append(python)

        tea1.tell_all_course()

    二、多态

      定义:多态指同一种/类事物不同的形态

      用途:多态性:在多态的背景下,可以在不用考虑对象具体类型的前提下而直接使用对象

         多态性的精髓:统一

      用法:

        import abc

        class xxx(metaclass=abc.ABCMeta):

          @abc.abstractmthod

          def yyy(self):

            pass

        父类只是用来建立规范的,不能用来实例化,更无需实现内部的方法

      鸭子类型:只要各方面都像什么,则被认为就是什么

    三、封装

      定义:装:往容器/名称空间里存入名字

         封:代表将存放于名称空间中的名字隐藏起来,这种隐藏对外不对内

      用途:封装数据属性:将数据属性隐藏起来,类外就无法直接操作属性,需要类内开辟一个接口,来间接地操作属性,可以在接口内定义控制逻辑,从而严格控制对属性的操作

         封装函数属性:隔离复杂度

      用法:在类内定义的属性前加__开头(没有__结束)

         总结:1.__开头的属性实现的隐藏仅仅只是一种语法意义上的变形,并不会真的限制类外部的访问

            2.该变形操作只在类定义阶段检测语法时发生一次,类定义阶段之后新增__开头的属性并不会变形

            3.如果父类不想让子类覆盖自己的属性,可以在属性前加__开头

  • 相关阅读:
    ASP.NET 2.0服务器控件开发之基本概念篇
    ASP.NET 2.0的URL映射的实现方法
    Asp.net中防止用户多次登录的方法
    SSRS:使用SQL2008教程学习Reporting Services之数据库AdventureWorks2008问题_学习笔记1
    ASP.NET服务器控件编程之热身运动
    ASP.NET2.0服务器控件开发之实现事件
    datalist 或者repeater分页
    .Net 上传图片加水印
    datalist 全选
    深入理解JavaScript中的函数
  • 原文地址:https://www.cnblogs.com/zhouyi0316/p/9513517.html
Copyright © 2020-2023  润新知