正文
0x106c49b38
>
@
A
.
add
8
这个结果说明了两个问题:
-
super().add(m) 确实调用了父类 A 的 add 方法。
-
super().add(m) 调用父类方法 def add(self, m) 时, 此时父类中 self 并不是父类的实例而是子类的实例, 所以 b.add(2) 之后的结果是 5 而不是 4 。
不知道这个结果是否和你想到一样呢?下面我们来看一个多继承的例子。
多继承
这次我们再定义一个 class C,一个 class D:
class
C
(
A
)
:
def __init__
(
self
)
:
self
.
n
=
4
def add
(
self
,
m
)
:
print
(
'self is {0} @C.add'
.
format
(
self
))
super
().
add
(
m
)
self
.
n
+=
4
class
D
(
B
,
C
)
:
def __init__
(
self
)
:
self
.
n
=
5
def add
(
self
,
m
)
:
print
(
'self is {0} @D.add'
.
format
(
self
))
super
().
add
(
m
)
self
.
n
+=
5
下面的代码又输出啥呢?
d
=
D
()
d
.
add
(
2
)
print
(
d
.
n
)
这次的输出如下:
self
is
__main__
.
D
object
at
0x10ce10e48
>
@
D
.
add
self
is
__main__
.
D
object
at
0x10ce10e48
>
@
B
.
add
self
is
__main__
.
D
object
at
0x10ce10e48
>
@
C
.
add
self
is
__main__
.
D
object
at
0x10ce10e48
>
@
A
.
add
19
你说对了吗?你可能会认为上面代码的输出类似:
self
is
__main__
.
D
object
at
0x10ce10e48
>
@
D
.
add
self
is