慕慕森
说一下self究竟是什么.
写这个的时候也没查阅文档,有些说法可能不是很准确.
类方法的第一个参数self是实例本身,也就是A=X()这个A.
In [1]: class A(object):
...: def get_self(self):
...: return self
...:
In [2]: instance = A()
In [3]: instance.get_self() == instance
Out[3]: True
这个还是很清楚的,我们确定了这个之后,再转头去看你举的例子.我们都知道,子类的方法会覆盖父类的同名方法.先看下边的例子:
class A(object):
def a(self):
pass
def b(self):
pass
class B(A):
def b(self):
pass
def __init__(self):
print super(B,self).a == self.a //True
print super(B,self).b == self.b //False
def main():
B()
if __name__ == '__main__':
main()
我们看到,在子类没有覆盖父类的方法时,子类的方法是等于父类的方法的,很纯粹的等于,内存中地址都是一样的.所以你那个例子中super().f()就和直接f()没区别的.同样,在子类的实例里也不会莫名其妙冒出来一个父类的实例作为self参数传给f()方法,而且,你子类的init方法覆盖了父类的init方法,所以父类的init方法根本就没有执行.从那个角度来说,都是万万不会等于父类初始化的值的.