首页 > 代码库 > python调用父类方法
python调用父类方法
本文和大家分享的主要是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调用父类方法