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 中,基类永远出现在派生类后面,如果有多个基类,基类的相对顺序保持不变。

来源:栖迟於一丘

时间: 2024-10-08 08:20:56

python调用父类方法的相关文章

python 调用父类方法, 重写父类构造方法, 不显式调用,会报错

子类不显式调用父类的构造方法,而父类构造函数初始化了一些属性,就会出现问题 如果子类和父类都有构造函数,子类其实是重写了父类的构造函数,如果不显式调用父类构造函数,父类的构造函数就不会被执行,导致子类实例访问父类初始化方法中初始的变量就会出现问题. 参考 https://www.cnblogs.com/lindaxin/p/7986227.html 原文地址:https://www.cnblogs.com/baxianhua/p/10819926.html

js原型链继承及调用父类方法

function Rect(config){} Rect.prototype.area = function(){ alert("我是父方法"); } function myRect(config){ arguments.callee.prototype.constructor.prototype.area(); //子类里调用父方法area arguments.callee.prototype.area();//子类里调用重载方法area } myRect.prototype = n

调用父类方法和返回值

今天用面向对象写了一段代码,用创建的类重构父类的方法,实现函数锁能实现的功能:代码如下 1 from os import getpid 2 from time import sleep 3 from multiprocessing import Process 4 5 6 class MyProcess(Process): 7 8 def __init__(self, args): 9 super(MyProcess, self).__init__() 10 self.args = args 1

子类中调用父类方法

可以用中文做变量 实例化和对象调用方法会自动传递self super调用父类方法:super().__init__(name,speed),不用传self,更爱父类名补收影响 原文地址:https://www.cnblogs.com/jintian/p/10920733.html

第52天学习python 子类调用父类方法

#子类中调用父类#初步程序# class Vehicle:#定义交通工具# Country="China"# def __init__(self,name,speed,load):# self.name=name# self.spedd=speed# self.load=load## def run(self):# print("开动了")## class Subway(Vehicle):#定义个地铁# def __init__(self,name,speed,lo

子类继承父类时,子类与父类有同名变量,当使用子类对象调用父类方法使用同名变量,这个变量是子类的,还是父类的? (改)

1 public class Test4 { 2 public static void main(String[] args){ 3 Son son = new Son(); 4 son.minusOne(); 5 System.out.println(son.testValue); 6 System.out.println(son.getSuperTestValue()); 7 son.plusOne(); 8 System.out.println(son.testValue); 9 Syst

Python调用java方法

需求 最近在后台项目代码中一段自定义的AES加解密的程序在平时的测试工作中应用频繁.因为写脚本经常会需要使用,而经过各种尝试,比如jpype等,都不尽如人意.最后转换思路找到了一种好方法: 1. 将java项目打成jar包: 2. 设定jar包的Main-class属性: 3. 在python中通过subprocess执行jar包. 修改main函数打jar包 在intellij中打jar包: 1. File--> Project Structure... --> Artifacts --&g

子类重定义父类方法调用父类方法

子类重定义父类方法只能调用自己的方法 .父类的同名函数被覆盖.(只要函数名相同就构成重定义).要调用父类的.必须用作用域. #include<iostream> #include<string> using namespace std; class MyStr { private: char *name; int id; public: MyStr() {} MyStr(int a) { cout<< a<<endl; } void fun(){ cout&

关于Java中子类调用父类方法

当一个类继承于另一个类,子类中没有父类的方法时.用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找. 当一个方法只在父类中定义时,调用该方法时会使用父类中的属性. 如果该方法中又调用了其他方法,那么还是按照之前的顺序,先在子类中查找,再在父类中查找. package Temp; class A { int x = 6; private int y = 2; public A(int a) { x = a; } int getz() { int z; z = x /