python调用实例做父类_Python super() 调用父类方法, 但是父类中 self 并不是父类的实例而是子类的实例?...

慕慕森

说一下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方法根本就没有执行.从那个角度来说,都是万万不会等于父类初始化的值的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值