• day29 Pyhton 面向对象 继承进阶


    一.内容回顾

      初识继承

        父类基类超类

        子类派生类

        派生 :派生方法.派生属性

        单继承

          继承的语法class子类名(父类名)

          解决开发中代码冗余的问题

          子类继承了父类之后,可以调用父类中的方法

          如果子类的对象调用某个方法:对象/自己类/父类

          如果子类的对象调用的某个方法父子类中都有:

            正常情况下是用自己的

            想用父类的:

              super().方法名()

              父类名.方法名(self)

          继承表达的是两个类之间 父类子类的关系

    二.今日内容

        抽象类:规则

          约束了所有继承这个抽象类的子类必须实现某些同名方法

    # from abc import ABCMeta,abstractmethod
    # class Abstract(metaclass=ABCMeta):   # metaclass 元类
    #     @abstractmethod
    #     def func_name(self):
    #         print('继承Abstract的子类中必须有一个func_name的方法')
    # class Son(Abstract):
    #     def func_name(self):
    #         print('继承了Abstract就必须写一个func_name方法')

        接口类(对多个抽象类的多继承)    

    # class Abstract1(metaclass=ABCMeta):   # metaclass 元类
    #     @abstractmethod
    #     def wahaha(self):
    #         print('继承Abstract1的子类中必须有一个wahaha的方法')
    # class Abstract2(metaclass=ABCMeta):   # metaclass 元类
    #     @abstractmethod
    #     def qqxing(self):
    #         print('继承Abstract2的子类中必须有一个qqxing的方法')
    # class Son(Abstract1,Abstract2):
    #     def wahaha(self):
    #         print('继承Abstract1的子类中必须有一个wahaha的方法')
    #     def qqxing(self):
    #         print('继承Abstract2的子类中必须有一个qqxing的方法')
    # 归一化设计
    # class Student:
    #     def login(self):pass
    # class Teacher:
    #     def login(self):pass
    # def login(obj):
    #     obj.login()
    # a = Student()
    # a.login()
    # b = Teacher()
    # b.login()
    # c3算法
    # 求某一类在多继承中的继承顺序:
    # 类的mro== [类] + [父类的继承顺序] + [父类2的继承顺序]....
    # 如果从左到右的第一个类在后面的顺序中都没出现,那么就提出来到mro顺序中
    # [ABCD] + [EO]   -->  A = [BCD] + [EO]
    # 如果从左到右的第一个类在后面的顺序中出现,且在后面的顺序中也是第一位,那么就提出来到mro顺序中
    # [ABCD] + [AEO]  -->  A =  [BCD] + [EO]
    # 如果从左到右的第一个类在后面的顺序中出现,但不是在第一位,那么应该继续往后找,找到符合规则的项目
    # [ABCD] + [EAO]  --> E = [ABCD] + [AO]
    # [ABCD] + [EAO] + [GEO]  --> G = [ABCD] + [EAO] + [EO]
    # [ABCD] + [EAO] + [EO]  --> GE = [ABCD] + [AO] + [O]
    # 关键结论:
        # 这个类没有发生继承,他的顺序永远是[类O]
        # 只要是单继承,不是多继承,那么mro顺序就是从子类到父类的顺序
  • 相关阅读:
    【并发】实现内存可见的两种方法比较:加锁和volatile变量
    HTTP2资料汇总
    微服务框架servicecomb
    【并发】使用synchronized获取互斥锁的几点说明
    【并发】通过同步保证内存可见性
    数据最终一致性方案设计
    Oracle中Constraint的状态参数initially与deferrable
    ORACLE GROUPING函数的使用
    Oracle INSERT WITH CHECK OPTION的用法
    ORACLE VERSIONS 用法
  • 原文地址:https://www.cnblogs.com/pythonz/p/10007447.html
Copyright © 2020-2023  润新知