zoukankan      html  css  js  c++  java
  • python的__mro__与__slot__

    class A(object):
        def __init__(self):
            print '    -> Enter A'
            print '    <- Leave A'
    
    class B(A):
        def __init(self):
            print '    -> Enter B'
            # A.__init__(self)
            super(B, self).__init__()
            print '    <- Leave B'
    
    class C(A):
        def __init__(self):
            print "    -> Enter C"
            # A.__init__(self)
            super(C, self).__init__()
            print "    <- Leave C"
    
    class D(B, C):
        def __init__(self):
            print "    -> Enter D"
            # B.__init__(self)
            # C.__init__(self)
            super(D, self).__init__()
            print "    <- Leave D"
    
    if __name__ == "__main__":
        d = D()
        print "MRO:", [x.__name__ for x in D.__mro__]
        print type(D.__mro__)
    

      

    执行以上代码,得到的输出为:

    -> Enter D
    -> Enter C
    -> Enter A
    <- Leave A
    <- Leave C
    <- Leave D
    MRO: ['D', 'B', 'C', 'A', 'object']
    <type 'tuple'>

    与之前一篇文章中的内容不同,类B并没有被执行,也许是因为没有显式调用,而C与B有相同父类。

    尽量避免使用非绑定方法,可能会造成重复调用。

    关于__slot__

    __slot__定义类中可以被外界访问的属性,类似node中的exports。

    当父类中定义了__slot__时,不能向父类中添加属性。如果子类中没有定义__slot__,则子类不受父类__slot__定义的限制。

    如果父类与子类中都定义了__slot__,则邮箱的结果为父类与子类__slot__的合集。

    相关链接http://www.jb51.net/article/66912.htm

  • 相关阅读:
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业02--线性表
    c博客06-结构体&文件
    c博客作业-指针
    C语言博客作业04--数组
    C语言博客作业03--函数
    图书馆
    5-互评-OO之接口-DAO模式代码阅读及应用.xls
    DS博客作业04--图
  • 原文地址:https://www.cnblogs.com/saolv/p/7389291.html
Copyright © 2011-2022 走看看