zoukankan      html  css  js  c++  java
  • 继承顺序与封装结合的2个例子

        有2个例子能很好地帮助我们理解继承顺序(例子来源海峰老师的讲课):

    例一:

    class A:
        def fa(self):
            print("from A")
    
        def test(self):
            self.fa()
    
    
    class B(A):
        def fa(self):
    print("from B") b = B() b.test()

    在上面的例子中,b 是B的一个实例化对象,b.test()是实例调用类中的函数的方法,对于实例来说是绑定方法;b调test方法的顺序:

    ----》b先在它自己那找,没有----》再在B那找,也没有----》再找到B的父类A,有,(下面是self.fa(),此时self是b,即self.fa()为b.fa() )

    从b.fa()开始继续找,----》先在它自己那找,没有----》再在B那找,有,即执行  ----------》print("from B")

    例二:

    class A:
        def __fa(self):  # _A__fa(self)
            print("from A")
    
        def test(self):
            self.__fa()   # self._A__fa()
    
    
    class B(A):
        def __fa(self):    # _B__fa(self)
            print("from B")
    
    
    b = B()
    b.test()  # b._A__fa()

    与例子一对比,例子二中使用__下划线对函数进行了封装,双下划线函数在定义的时候就进行了相应的变形或叫做转换,见上面代码后的注释,所以b.test()在调用test方法时顺序:

    ----》b先在它自己那找,没有----》再在B那找,也没有----》再找到B的父类A,有,(下面是self.__fa(),此时self是b,即self.__fa()为b.__fa() ,转化过来即为b._A__fa())

    从b._A__fa()开始继续找,----》先在它自己那找,没有----》再在B那找,不一样也没有 ----》再在B的父类A那里找,有,即执行  ----------》print("from A")

  • 相关阅读:
    HDUoj(1002)A + B Problem II
    HIT Summer 20180731
    Windows10下python3.5对维基百科语料用word2vec进行训练寻找同义词相似度
    关键词抽取
    win10+python遇到:Using TensorFlow backend.错误
    Windows下Python3.5+numpy+keras+tesorflow的环境配置
    常用的一些序列号
    Umbraco扩展开发
    Umbraco Content属性
    Windows查看端口占用
  • 原文地址:https://www.cnblogs.com/weigege2015/p/7762281.html
Copyright © 2011-2022 走看看