当前位置: 移动技术网 > IT编程>脚本编程>Python > super在python中有什么用

super在python中有什么用

2019年05月06日  | 移动技术网IT编程  | 我要评论

人民的名义网盘下载,日本在线视频网站,一站到底20120809

所属网站分类: python高级 > 


作者:阿里妈妈

链接:

来源:python黑洞网

 

有什么区别?

 

class child(somebaseclass):
    def __init__(self):
        super(child, self).__init__()

 

 

class child(somebaseclass):
    def __init__(self):
        somebaseclass.__init__(self)
我们已经看到super在只有单继承的类中使用了很多,但也可以在多重继承中使用它,那么在这种情况下使用它的优点是什么?

 

 

somebaseclass.__init__(self)
意味着调用somebaseclass的__init__。而

 

 

super(child, self).__init__()

表示__init__从child实例的方法解析顺序(mro)中的父类调用绑定。

如果实例是child的子类,则mro中可能会有另一个父级。

我玩了一下super(),并且认识到我们可以改变呼叫顺序。

例如,我们有下一个层次结构:

 a
   / \
  b   c
   \ /
    d

在这种情况下,d的mro将是(仅适用于python 3):

 

in [26]: d.__mro__
out[26]: (__main__.d, __main__.b, __main__.c, __main__.a, object)
让我们创建一个super()执行后调用的类。

 

 

in [23]: class a(object): #  or with python 3 can define class a:
...:     def __init__(self):
...:         print("i'm from a")
...:  
...: class b(a):
...:      def __init__(self):
...:          print("i'm from b")
...:          super().__init__()
...:   
...: class c(a):
...:      def __init__(self):
...:          print("i'm from c")
...:          super().__init__()
...:  
...: class d(b, c):
...:      def __init__(self):
...:          print("i'm from d")
...:          super().__init__()
...: d = d()
...:
i'm from d
i'm from b
i'm from c
i'm from a

    a
   / ⇖
  b → c
   ⇖ /
    d
因此我们可以看到解决方案顺序与mro中的相同。但是当我们super()在方法的开头调用时:

 

 

in [21]: class a(object):  # or class a:
...:     def __init__(self):
...:         print("i'm from a")
...:  
...: class b(a):
...:      def __init__(self):
...:          super().__init__()  # or super(b, self).__init_()
...:          print("i'm from b")
...:   
...: class c(a):
...:      def __init__(self):
...:          super().__init__()
...:          print("i'm from c")
...:  
...: class d(b, c):
...:      def __init__(self):
...:          super().__init__()
...:          print("i'm from d")
...: d = d()
...: 
i'm from a
i'm from c
i'm from b
i'm from d
我们有一个不同的顺序,它颠倒了mro元组的顺序。

 

 

  a
   / ⇘
  b ← c
   ⇘ /
    d 
 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网