zoukankan      html  css  js  c++  java
  • 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.如果父类不想让子类覆盖自己的属性,可以在属性前加__开头

  • 相关阅读:
    LeetCode 230. Kth Smallest Element in a BST
    LeetCode 114. Flatten Binary Tree to Linked List
    LeetCode 222. Count Complete Tree Nodes
    LeetCode 129. Sum Root to Leaf Numbers
    LeetCode 113. Path Sum II
    LeetCode 257. Binary Tree Paths
    Java Convert String & Int
    Java Annotations
    LeetCode 236. Lowest Common Ancestor of a Binary Tree
    LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/zhouyi0316/p/9513517.html
Copyright © 2011-2022 走看看