# Python 3
class B(A):
def add(self, x):
super().add(x)
# Python 2
class B(A):
def add(self, x):
super(B, self).add(x)
Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx; 如果用的是 Python 2 的话,本文的 super() 需要被替换为 super(Class, self)。
. super有什么作用呢? 下面用例子说明:
# 例子中默认是Python 3
class A:
def __init__(self):
self.n = 2
def add(self, m):
print('self is {0} @A.add'.format(self))
self.n += m
class B(A):
def __init__(self):
self.n = 3
def add(self, m):
print('self is {0} @B.add'.format(self))
super().add(m)
self.n += 3
我们执行下面的代码:
b = B()
b.add(2)
print(b.n)
输出为:
self is <__main__.B object at 0x106c49b38> @B.add
self is <__main__.B object at 0x106c49b38> @A.add
8
这个结果说明了两个问题: 1、super().add(m) 确实调用了父类 A 的 add 方法。 2、super().add(m) 调用父类方法 def add(self, m) 时, 此时父类中 self 并不是父类的实例而是子类的实例, 所以 b.add(2) 之后的结果是 5 而不是 4 。
|