Python中子类怎样调用父类方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中子类怎样调用父类方法相关的知识,希望对你有一定的参考价值。

参考技术A 子类调用父类函数有以下方法:
直接写类名调用
用 super(type, obj).method(arg)方法调用。
在类定义中调用本类的父类方法,可以直接用super().method(arg)

class A:
def method(self, arg):
pass

class B(A):
def method(self, arg):
# A.method(self,arg) # 1
# super(B, self).method(arg) # 2
super().method(arg) # 3

Python_子类调用父类的方法

1.方式一
子类调用父类的方法,包含2中形式的调用。一种形式是在类内部通过继承的方式调用父类的方法,另外一种形式是子类实例化后之后通过继承的方式来调用父类的方法。如下图所示:
技术分享图片
注意一点,在子类内部通过继承的方式调用父类的属性时,必须要带上self位置参数(self只在实例化过程中和在实例调用属性时才能省略(self本来的含义就是指向实例自己));而实例在通过继承调用父类的属性或方法时,则不用传self参数,因为实例已经实例化了呀!!!
该部分的代码块如下:注意一点,在子类内部通过继承的方式调用父类的属性时,必须要带上self位置参数(self只在实例化过程中和在实例调用属性时才能省略(self本来的含义就是指向实例自己));而实例在通过继承调用父类的属性或方法时,则不用传self参数,因为实例已经实例化了呀!!!

该部分的代码块如下:

class Person():
    "人的类"
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def eat(self):
        print("%s开始吃饭了"%self.name)
class Student(Person):
    "学生类"
    def __init__(self,name,age,sex,classnaem):
        #子类调用父类的构造函数进行初始化
        Person.__init__(self,name,age,sex)  #通过子类把参数传给父类(self不能少,self只有在实例化和实例调用类时才能省略,此处不是)
        self.classnaem = classnaem
    def course(self):
        print("%s在%s上课"%(self.name,self.classnaem))
    def done(self):
        print("这个学生在干嘛?")
        #子类调用父类方法
        Person.eat(self)    #子类在调用父类方法必须要传self
#实例化一个子类
student = Student("周明",23,‘男‘,"11届土木3班")
#调用子类本身的方法
student.course()
#通过子类调用父类的方法--->实例化之后来调用父类的方法
student.eat()
#调用子类的方法,在子类方法中调用了子类的方法,与student.eat有区别
student.done()

此时如果父类的名称更改了,那么在子类中所有用到父类名的地方均要进行修改了。所有此种方法不便于后期维护,为此我们选择方式二。
2.方式二
使用super来代替父类名,以方便代码的后期维护,见下图:
技术分享图片
使用super的好处,一是可以代替父类名,这样后期父类名更改了,我们只需要更改子类名称后面的父类名即可,子类中其他的父类名可以不用更改;二是使用了super后,调用父类方法时可以不传参数self。
该部分的代码块为:

class Person():
    "人的类"
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def eat(self):
        print("%s开始吃饭了"%self.name)
class Student(Person):
    "学生类"
    def __init__(self,name,age,sex,classnaem):
        #子类调用父类的构造函数进行初始化
        # Person.__init__(self,name,age,sex)  #通过子类把参数传给父类(self不能少,self只有在实例化和实例调用类时才能省略,此处不是)
        #使用super来替换父类名
        super().__init__(name,age,sex)  #通过子类把参数传给父类,用super可以省略self
        self.classnaem = classnaem
    def course(self):
        print("%s在%s上课"%(self.name,self.classnaem))
    def done(self):
        print("这个学生在干嘛?")
        #子类调用父类方法
        super().eat()    #子类在调用父类方法,使用super可以省略self
#实例化一个子类
student = Student("周明",23,‘男‘,"11届土木3班")
#调用子类本身的方法
student.course()
#通过子类调用父类的方法--->实例化之后来调用父类的方法
student.eat()
#调用子类的方法,在子类方法中调用了子类的方法,与student.eat有区别
student.done()

以上是关于Python中子类怎样调用父类方法的主要内容,如果未能解决你的问题,请参考以下文章

Python子类调用父类方法或子类定义的方法输出会多出个'None'

Java中怎样获取一个类的所有子类?

python子类调用父类的方法

java中怎样做可以把父类强制转换成子类

Python入门精华-OOP调用父类的方法及MRO方法解析序列

python中子类调用父类的方法