python 的多重继承
multiple inheritance of python
在How does Python's super() work with multiple inheritance?
一个答案解释了为什么,对于这个例子:
class First(object):
def __init__(self):
super(First, self).__init__()
print "first"
class Second(object):
def __init__(self):
super(Second, self).__init__()
print "second"
class Third(First, Second):
def __init__(self):
super(Third, self).__init__()
print "that's it"
答案是:
>>> x = Third()
second
first
that's it
根据解释,是因为:
Inside __init__
of First
super(First, self).__init__()
calls the __init__
of Second
, because that is what the MRO dictates!
他是什么意思?为什么调用 First super __init__
会调用 Second 的 __init__
?我认为第一与第二无关?
据说:"because that is what the MRO dictates",我看了https://www.python.org/download/releases/2.3/mro/
但仍然没有头绪。
谁能解释一下?
单个 classes 的 MRO(方法解析顺序)是什么并不重要。唯一重要的事情(如果你使用 super
)是你调用方法的 class 的 MRO。
因此,当您调用 Third.__init__
时,它将跟随 Third.mro
,即 Third, First, Second, object
:
>>> Third.mro()
[__main__.Third, __main__.First, __main__.Second, object]
所以任何 super
都会在 MRO 中查找下一个超级 class,而不是实际 class 的超级 class 你 "in".
在How does Python's super() work with multiple inheritance? 一个答案解释了为什么,对于这个例子:
class First(object):
def __init__(self):
super(First, self).__init__()
print "first"
class Second(object):
def __init__(self):
super(Second, self).__init__()
print "second"
class Third(First, Second):
def __init__(self):
super(Third, self).__init__()
print "that's it"
答案是:
>>> x = Third()
second
first
that's it
根据解释,是因为:
Inside
__init__
ofFirst
super(First, self).__init__()
calls the__init__
ofSecond
, because that is what the MRO dictates!
他是什么意思?为什么调用 First super __init__
会调用 Second 的 __init__
?我认为第一与第二无关?
据说:"because that is what the MRO dictates",我看了https://www.python.org/download/releases/2.3/mro/ 但仍然没有头绪。
谁能解释一下?
单个 classes 的 MRO(方法解析顺序)是什么并不重要。唯一重要的事情(如果你使用 super
)是你调用方法的 class 的 MRO。
因此,当您调用 Third.__init__
时,它将跟随 Third.mro
,即 Third, First, Second, object
:
>>> Third.mro()
[__main__.Third, __main__.First, __main__.Second, object]
所以任何 super
都会在 MRO 中查找下一个超级 class,而不是实际 class 的超级 class 你 "in".