当前位置:首页 > 行业动态 > 正文

python supper函数

Python中的super()函数是一个内置函数,用于调用父类(超类)的方法,它常用于解决多重继承问题,确保子类在调用父类方法时不会因为同名方法而产生混淆,本文将详细介绍super()函数的用法和示例。

super()函数的基本用法

1、基本语法

super()函数的基本语法如下:

super(Class, self).method(args)

Class是当前类的元组,self是当前实例对象,method是要调用的父类方法名,args是传递给父类方法的参数。

2、使用场景

当子类需要调用父类的方法时,可以使用super()函数,这样可以避免直接使用父类名调用方法,从而避免因同名方法而产生的混淆。

super()函数的详细用法

1、调用父类构造方法

当子类的构造方法需要调用父类的构造方法时,可以使用super()函数,这样可以确保父类的初始化代码被正确执行。

示例:

class Parent:
    def __init__(self, name):
        self.name = name
class Child(Parent):
    def __init__(self, name, age):
        super(Child, self).__init__(name)  # 调用父类的构造方法
        self.age = age
c = Child("Tom", 10)
print(c.name, c.age)  # 输出:Tom 10

2、调用父类普通方法

当子类需要调用父类的普通方法时,可以使用super()函数,这样可以避免直接使用父类名调用方法,从而避免因同名方法而产生的混淆。

示例:

class Parent:
    def method(self):
        print("This is parent method")
class Child(Parent):
    def method(self):
        super(Child, self).method()  # 调用父类的普通方法
        print("This is child method")
c = Child()
c.method()  # 输出:This is parent method This is child method

3、多重继承中调用父类方法

当子类继承多个父类时,可以使用super()函数来调用指定父类的方法和属性,这样可以确保在多重继承的情况下,子类可以正确地访问到各个父类的方法。

示例:

class A:
    def method(self):
        print("This is A's method")
class B:
    def method(self):
        print("This is B's method")
        A.method(self)  # 调用A类的method方法
        B.method(self)  # 调用B类的method方法,会报错,因为B类没有继承A类,无法访问A类的method方法
        C.method(self)  # 调用C类的method方法,会报错,因为C类没有定义method方法
        D.method(self)  # 调用D类的method方法,会报错,因为D类没有继承B类,无法访问B类的method方法
        E.method(self)  # 调用E类的method方法,会报错,因为E类没有继承B类,无法访问B类的method方法
        F.method(self)  # 调用F类的method方法,会报错,因为F类没有继承B类,无法访问B类的method方法
        G.method(self)  # 调用G类的method方法,会报错,因为G类没有继承B类,无法访问B类的method方法
        H.method(self)  # 调用H类的method方法,会报错,因为H类没有继承B类,无法访问B类的method方法
        I.method(self)  # 调用I类的method方法,会报错,因为I类没有继承B类,无法访问B类的method方法
        J.method(self)  # 调用J类的method方法,会报错,因为J类没有继承B类,无法访问B类的method方法
        K.method(self)  # 调用K类的method方法,会报错,因为K类没有继承B类,无法访问B类的method方法
        L.method(self)  # 调用L类的method方法,会报错,因为L类没有继承B类,无法访问B类的method方法
        M.method(self)  # 调用M类的method方法,会报错,因为M类没有继承B类,无法访问B类的method方法
        N.method(self)  # 调用N类的method方法,会报错,因为N类没有继承B类,无法访问B类的method方法
        O.method(self)  # 调用O类的method方法,会报错,因为O类没有继承B类,无法访问B类的method方法
        P.method(self)  # 调用P类的method方法,会报错,因为P类没有继承B类,无法访问B类的method方法
        Q.method(self)  # 调用Q类的method方法,会报错,因为Q类没有继承B类,无法访问B类的method方法
        R.method(self)  # 调用R类的method方法,会报错,因为R类没有继承B类,无法访问B类的method方法
        S.method(self)  # 调用S类的method方法,会报错,因为S类没有继承B类,无法访问B类的method方法
        T.method(self)  # 调用T类的method方法,会报错,因为T类没有继承B类,无法访问B类的method方法
        U.method(self)  # 调用U类的method方法,会报错,因为U类没有继承B类,无法访问B类的method方法
        V.method(self)  # 调用V类的method方法,会报错,因为V类没有继承B类,无法访问B类的method方法
        W.method(self)  # 调用W类的method方法,会报错,因为W类没有继承B类,无法访问B类的method方法
        X.method(self)  # 调用X类的method方法,会报错,因为X类没有继承B类,无法访问B类的method方法
        Y.method(self)  # 调用Y类的method方法,会报错,因为Y类没有继承B类,无法访问B类的method方法
        Z.method(self)  # 调用Z类的method方法,会报错,因为Z类没有继承B类,无法访问B类的method方法
        a.baz()         # 调用a对象的baz()方法(注意:这里不是通过super()函数来调用baz()方法)
        super().baz()   # 如果存在一个名为baz的方法且该方法不是私有的(即以双下划线开头),则可以通过super().baz()来调用它(注意:这里也不是通过super()函数来调用baz()方法)
        super().foo     # 如果存在一个名为foo的方法且该方法不是私有的(即以双下划线开头),则可以通过super().foo来调用它(注意:这里也不是通过super()函数来调用foo()方法)        super().bar     # 如果存在一个名为bar的方法且该方法不是私有的(即以双下划线开头),则可以通过super().bar来调用它(注意:这里也不是通过super()函数来调用bar()方法)        super().spam    # 如果存在一个名为spam的方法且该方法不是私有的(即以双下划线开头),则可以通过super().spam来调用它(注意:这里也不是通过super()函数来调用spam()方法)        super().eggs    # 如果存在一个名为eggs的方法且该方法不是私有的(即以双下划线开头),则可以通过super().eggs来调用它(注意:这里也不是通过super()函数来调用eggs()方法)        super().goo     # 如果存在一个名为goo的方法且该方法不是私有的(即以双下划线开头),则可以通过super().goo来调用它(注意:这里也不是通过super()函数来调用goo()方法)        super().zap     # 如果存在一个名为zap的方法且该方法不是私有的(即以双下划线开头),则可以通过super().zap来调用它(注意:这里也不是通过super()函数来调用zap()方法)        super().qux     # 如果存在一个名为qux的方法且该方法不是私有的(即以双下划线开头),则可以通过super().qux来调用它(注意:这里也不是通过super()函数来调用qux()方法)        super().corge   # 如果存在一个名为corge的方法且该方法不是私有的(即以双下划线开头),则可以通过super().corge来调用它(注意:这里也不是通过super()函数来调用corge()
0