人民的名义网盘下载,日本在线视频网站,一站到底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
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Python爬虫:Request Payload和Form Data的简单区别说明
浅谈Python中threading join和setDaemon用法及区别说明
Python3-异步进程回调函数(callback())介绍
python继承threading.Thread实现有返回值的子类实例
Python中使用threading.Event协调线程的运行详解
网友评论