私はPython2.7
のドキュメントを読もうとしましたが、残念ながら理解する機会はありません.
なぜそれが起こるのですか?MRO と init 内のスーパー コールとはどのように接続されていますか?
最初の例:
class SuperFirst(object):
def __init__(self):
super(SuperFirst, self).__init__()
print "We were in SuperFirst's __init__"
class SuperSecond(object):
def __init__(self):
super(SuperSecond, self).__init__()
print "We were in SuperSecond's __init__"
class JustThird(SuperFirst, SuperSecond):
def __init__(self):
super(JustThird, self).__init__()
print "We were in JustThird's __init__"
JustThird()
これは以下を出力します:
We were in SuperSecond's __init__
We were in SuperFirst's __init__
We were in JustThird's __init__
次に、最初の親の init 内のスーパー コールを削除します。
class SuperFirst(object):
def __init__(self):
print "We were in SuperFirst's __init__"
class SuperSecond(object):
def __init__(self):
super(SuperSecond, self).__init__()
print "We were in SuperSecond's __init__"
class JustThird(SuperFirst, SuperSecond):
def __init__(self):
super(JustThird, self).__init__()
print "We were in JustThird's __init__"
JustThird()
出力:
We were in SuperFirst's __init__
We were in JustThird's __init__
最初の親でのみ保持します。
class SuperFirst(object):
def __init__(self):
super(SuperFirst, self).__init__()
print "We were in SuperFirst's __init__"
class SuperSecond(object):
def __init__(self):
print "We were in SuperSecond's __init__"
class JustThird(SuperFirst, SuperSecond):
def __init__(self):
super(JustThird, self).__init__()
print "We were in JustThird's __init__"
JustThird()
出力:
We were in SuperSecond's __init__
We were in SuperFirst's __init__
We were in JustThird's __init__
両方の親から削除します。
class SuperFirst(object):
def __init__(self):
print "We were in SuperFirst's __init__"
class SuperSecond(object):
def __init__(self):
print "We were in SuperSecond's __init__"
class JustThird(SuperFirst, SuperSecond):
def __init__(self):
super(JustThird, self).__init__()
print "We were in JustThird's __init__"
JustThird()
出力:
We were in SuperFirst's __init__
We were in JustThird's __init__