python中夫类的调用方法_Python中子类调用父类的初始化方法

在Python中子类继承父类的过程中,如果子类不覆盖父类的__init__()方法,则子类默认将执行与父类一样的初始化方法。但是假如子类自己重写了(也成为覆盖)父类的__init__()方法,那么就需要显式的调用父类的初始化方法了。有两种方法可以做到:

1:ParentClass.__init__(),父类名加上init函数

2:super(type,cls).__init__()

重点介绍下这个,这个也是Python在借鉴了C++和JAVA的经验后,做出的改进语言熟悉程度的一种努力。

super(type,cls)实质上是super类的3个静态方法之一。

参考下super类的定义:

class super(object)

super(type) -> unbound super object

super(type, obj) -> bound super object; requires isinstance(obj, type)

super(type, type2) -> bound super object; requires issubclass(type2, type)

Typical use to call a cooperative superclass method:

class C(B):

def meth(self, arg):

super(C, self).meth(arg)

从图上可以看出,我们实质上在调用的是第二个方法,其中第一个参数是开始寻找父类的起始点(起始但不包括),第二个参数是需要一个对应第一个type的实例,即满足isinstance(obj,type),这个方法将返回第一个满足继承关系的类,寻找顺序遵从type.__mro__属性顺序(不妨将它认为是倒树的广度优先遍历顺序)。

这个方法的好处在于将类之间的构造方法调用的耦合关系彻底解耦了。如果改变了当前Class,只需要适当的改变下super的第一个参数即可。

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2011-05-15 20:25

浏览 17026

评论

4 楼

bestchenwu

2011-05-17

哈哈 ~~~

小弟遵命~~

3 楼

haoningabc

2011-05-16

小陈童鞋,能不能把哥名字去掉呢,最近追杀哥的MM比较多

2 楼

bestchenwu

2011-05-15

哈哈

想不到像俺这种草民也会有郝宁哥光临,倍感荣幸~~

1 楼

haoningabc

2011-05-15

不错,很精辟,这种博客继续发啊

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值