• Python 面向对象(三)


    继承的实现原理

    Python支持多继承

    多继承的时候  属性查找的顺序

    研究经典类和新式类在属性查找的不同

    主要是形成菱形关系才有深度跟广度

     

    广度优先

     

    Python的继承原理  Python3的内置方法进行顺序查找

    c3线性算法   F.mro()

    子类重用父类的方式

    super()专门引用父类的一些属性  是一个特殊的对象   参照mro列表

    从当前类的父类往后找

    依赖于继承   按照mro列表去找

     示例

     1 """
     2 Description:
     3 Author:Nod
     4 Date:18-05-06
     5 Record:
     6 #---------------------------------v1-----------------------------------#
     7 """
     8 
     9 """
    10 
    11 super()专门引用父类的一些属性  是一个特殊的对象   参照mro列表
    12 
    13 从当前类的父类往后找
    14 依赖于继承
    15 
    16 
    17 
    18 """
    19 
    20 class OldboyPeople:
    21     def __init__(self,name,age,sex):
    22         self.Name=name
    23         self.Age=age
    24         self.Sex=sex
    25 
    26     def tell_info(self):
    27         print('info is %s-%s-%s'%(self.Name,self.Age,self.Sex))
    28 
    29 
    30 class Student(OldboyPeople):
    31     def __init__(self,name,age,sex,course):
    32         # OldboyPeople.__init__(self,name,age,sex)
    33         super().__init__(name,age,sex)
    34         self.Course=course
    35 
    36     def tell_info(self):
    37         print(' student info')
    38         #OldboyPeople.tell_info(self)
    39         super().tell_info()
    40 
    41 stu1=Student('nod','25','F','Linux')
    42 stu1.tell_info()
    View Code

    super方法的补充

    super   先找自己类  再去foo  再去 bar

    super从当前类为起始   再找到当前类的下一类   完全参照

    mro列表

    严格按照mro列表

     1 """
     2 Description:super总结
     3 Author:Nod
     4 Date:18-05-05
     5 Record:
     6 #---------------------------------v1-----------------------------------#
     7 """
     8 
     9 
    10 class Foo:
    11     def f2(self):
    12         print('foo.f2')
    13 
    14     def f1(self):
    15         print('Foo f1')
    16         super().f2()  # super的查找会按照mro列表查找  直接找到当前类的下一个;完全参照mro列表
    17 
    18 
    19 class Bar:
    20     def f2(self):
    21         print('Bar f2')
    22 
    23 
    24 class Sub(Foo, Bar):
    25     pass
    26 
    27 
    28 s = Sub()
    29 # print(Sub.mro())
    30 # #[<class '__main__.Sub'>, <class '__main__.Foo'>, <class '__main__.Bar'>, <class 'object'>]
    31 s.f1()
    View Code

    Python 的多态与多态性

    Python不限制输入,建议人们约定俗称的去遵守

    记住那个谚语,只要长得像鸭子就是鸭子而不管它到底是不是鸭子;如果

    一定去甄别什么是什么   什么是鸭子的话   那就是继承的关系  继承在一定程度上影响了代码的低耦合

    造成了高耦合;

    因为一旦修改了父类,可能会对子类有一定的影响

    示例代码

     1 class Disk:
     2     def wirte(self):
     3         print('write to disk')
     4     def read(self):
     5         print('read from disk')
     6         
     7         
     8 class Process:
     9     def write(self):
    10         print('write to process')
    11         
    12     def read(self):
    13         print(' read from process')
    View Code

     Python这么语言不会真正的限制你 虽然在有的地方会限制,但是不会真正的限制

  • 相关阅读:
    【Angular2】ng2的开始_组件
    【js框架】随笔
    【sublime text3】个性化定制
    PLSQL中文乱码问题
    Microsoft office 2010密钥
    node_oracle连接
    oracle安装配置
    Logging in Java
    Java 基础
    Hibernate
  • 原文地址:https://www.cnblogs.com/nodchen/p/8999819.html
Copyright © 2020-2023  润新知