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

  • 相关阅读:
    如何编写一个简单的依赖注入容器
    网站框架的动态编译的实现原理
    Python实现语音识别和语音合成
    OpenCV图像处理以及人脸识别
    Shell教程快速入门
    TensorFlow入门教程
    如何免费使用Google的GPU跑深度学习代码
    高等数学系列文章
    Git系列教程
    一键构造你的博客园目录
  • 原文地址:https://www.cnblogs.com/weigege2015/p/7762281.html
Copyright © 2011-2022 走看看