`

python 类继承 重写 super MRO

阅读更多

          类继承的好处的就是少写代码。

          重点讲一下,基类中为什么要有super(基类,self).__init__()或patrent.__init__()   

          其实,它们的作用都是一样的,为了MRO

           所谓的MRO是:             

           class Root(object):

def __init__(self):
        # self.name = name
        # self.age = age
print 'this is Root'
# def t1(self):
    #     print self.name
class B(Root):
    def __init__(self):
        # super(B,self).__init__()
Root().__init__()
        # print self.name
print 'leave B'
class C(Root):
    def __init__(self):
        # super(C,self).__init__()
print 'leave C'
class D(B,C):
    pass
this is Root
this is Root
leave B
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.Root'>, <type 'object'>)
   并不是所有的基类都需要super,只有用到父类的__init__()

   关于重写,就是变成子类的方法,原父类的方法不受影响。
   
class E(object):
    A = 10
def __init__(self,name):
        self.name = name
        print 'E'
def spam(self):
        # print self.name
print 'spam'
def f1(self):
        print 'patrent.f1',self.name


class F(E):
    def __init__(self):
        super(F,self).__init__('name')
        print 'F'
def f1(self):
    #     print 'F.f1'
F().f1()
        F.A






f = F()
f.spam()
e = E(9999)
e.f1()

reference :
https://laike9m.com/blog/li-jie-python-super,70/
http://ajstar.blog.163.com/blog/static/174234839201011932651799/
http://www.crazyant.net/1303.html
0
0
分享到:
评论

相关推荐

    Python 多继承类的 MRO 算法——C3算法

    Python2.3之后对于多继承类计算父类的搜索顺序时采用了新的算法,c3算法。这里是c3的源码以及测试脚本,希望能有所帮助

    Python多继承以及MRO顺序的使用

    主要介绍了Python多继承以及MRO顺序的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    python里 super类的工作原理详解

    super 的工作原理如下: def super(cls, inst): mro = inst.__class__.mro() ...当你使用 super(cls, inst) 时,Python 会在 inst 的 MRO 列表上搜索 cls 的下一个类。 下面看一个例子: class A: def __ini

    Python类的继承super相关原理解析

    看了网上许多关于super、mro、C3的介绍感觉没有一份很容易初学者理解的文档,直接看C3算法的话,比较难理解,也没必要,如果掌握一套规律的话,会轻松许多。我将网上这些博主的文章进行一个梳理总结,最后形成一套...

    Python高级编程之继承问题详解(super与mro)

    主要介绍了Python高级编程之继承问题,结合实例形式详细分析了Python多继承、MRO顺序及super调用父类等相关操作技巧,需要的朋友可以参考下

    Python库 | python-mro-language-server-0.0.1.tar.gz

    python库。 资源全名:python-mro-language-server-0.0.1.tar.gz

    Python的继承多态

    单继承1.1 继承的概念、语法和特点1) 继承的语法2) 专业术语3) 继承的传递性1.2 方法的重写1) 覆盖父类的方法2) 对父类方法进行 **扩展**关于 `super`调用父类方法的另外一种方式1.3 父类的 私有属性 和 私有方法02...

    Python多继承原理与用法示例

    在Python2.3之前,MRO是基于深度优先算法的,自2.3开始使用C3算法,定义类时需要继承object,这样的类称为新式类,否则为旧式类 从图中可以看出,旧式类查找属性时是深度优先搜索,新式类则是广度优先搜索 C3算法最...

    python多重继承实例

    本文实例讲述了python多重继承用法,分享给大家供大家参考。具体实现方法如下: 1.mro.py文件如下: #!/usr/bin/python # Filename:mro.py class P1: def foo(self): print 'called P1-foo' class P2: def foo...

    Python类的多重继承问题深入分析

    正文 首先得说明的是,Python的类分为经典类 和 新式类 经典类是python2.2之前...2.经典类在类多重继承的时候是采用从左到右深度优先原则匹配方法的..而新式类是采用C3算法(不同于广度优先)进行匹配的 3.经典类是没有__

    理解Python的多继承MRO

    Method Resolution Order , 定义了Python中多继承存在的情况下,解释器查找函数解析的具体顺序 什么是函数解析顺序 # 经典继承问题 - 棱形继承 class A: def who_am_i(self): print("i am A") class B: pass ...

    python类中super() 的使用解析

    super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。 MRO 就是类的方法解析顺序表, 其实也就是继承...

    python面向对象day04.txt

    super 函数是按mro 顺序向上查找 函数重写 repr(obj) str(obj) int(obj) complex(obj) bool(obj) float(obj) len(obj) abs(obj) ... iter(obj) next(obj) 迭代器和可迭代对象: def myyield(): yield ...

    Python代码-类的继承书写顺序会影响mro顺序.py

    ——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!

    Python 107.mro().mp4

    Python 107.mro().mp4

    深入解析Python编程中super关键字的用法

    官方文档中关于super的定义说的不是很多,大致意思是返回一个代理对象让你能够调用一些继承过来的...super类的初始方法签名如下: def __init__(self, type1, type2=None): # known special case of super.__init__

    圣诞树代码编程python-24-拓展-mro顺序.ev4.rar

    圣诞树代码编程python-24-拓展_mro顺序.ev4.rar

    python多重继承新算法C3介绍

    mro即 method resolution order (方法解释顺序),主要用于在多继承时判断属性的路径(来自于哪个类)。 在python2.2版本中,算法基本思想是根据每个祖先类的继承结构,编译出一张列表,包括搜索到的类,按策略删除重复...

Global site tag (gtag.js) - Google Analytics