码迷,mamicode.com
首页 > Web开发 > 详细

python调用父类方法

时间:2016-12-18 22:20:12      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:

本文和大家分享的主要是python开发中,调用父类的两种方法异同点,希望对大家学习和使用python语言有所帮助。

python中有两种方法可以调用父类的方法: super(Child, self).method(args) Parent.method(self, args) 。我用其中的一种报了如下错误:


找不到 classobj 。当我把调用改为 super(B, self).f(name) 就能正确运行,且结果正确。

分析错误

因为基类没有继承 object , python中,一个可以这样创建:

class A:

pass

也可以这样创建:

class A(object):

pass

这两者的区别就是:

这是老式类(前者)和新式类(后者)的区别。

python3已经把旧类型去掉了,也就是说已经隐式继承了 object ,所以,python3中写不写继承object都是没有区别的

两种调用的区别

Parent.__init__(self)  super(Child, self).__init__() 的区别是什么?

super 理解成父类也是理所当然,python里其实指的是 MRO 中的下一个类!

super其实干了这件事,看这个 答案 

def super(cls, inst):

mro = inst.__class__.mro() # Always the most derived class

return mro[mro.index(cls) + 1]

MRO 全称 Method Resolution Order,它代表了类继承的顺序。

super 是用来解决多重继承问题的,假设 B C D 都是直接继承 class A

class E(B, C, D):

def __init__(self):

# code...

如果E类的构造函数使用 super(E, self).__init__() 时,A类的构造函数会被执行一次,而用另一种方法,A类的构造函数会被执行多次。

MRO 中,基类永远出现在派生类后面,如果有多个基类,基类的相对顺序保持不变。

 

来源:栖迟於一丘


python调用父类方法

标签:

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
jiangjie190
加入时间:2016-02-19
  关注此人  发短消息
文章分类
jiangjie190”关注的人------(0
jiangjie190”的粉丝们------(1
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!