python supper函数

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

python supper函数
(图片来源网络,侵删)

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()

原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/294051.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
酷盾叔的头像酷盾叔订阅
上一篇 2024-03-02 13:55
下一篇 2024-03-02 13:56

相关推荐

  • php如何实现多重继承功能

    PHP不支持多重继承,但可以通过接口实现类似功能。定义多个接口,让类实现这些接口,从而实现多重继承的效果。

    2024-05-12
    0103
  • python 父类 构造函数

    在Python中,父类的构造函数(__init__方法)是一个特殊的方法,用于初始化对象的属性,当我们创建一个类的实例时,__init__方法会自动调用,如果我们想要在子类中继承父类的属性和方法,可以使用super()函数来调用父类的构造函数,下面是一个简单的示例:class Parent: def __init__(self, na……

    2024-03-18
    083
  • SUPER函数机

    在Python中,super()函数是一个内置函数,用于调用父类(超类)的方法,它常用于解决多重继承的问题,以及在子类中重写父类方法时,仍然保留父类的实现,本文将详细介绍super()函数的使用方法和注意事项。super()函数的基本用法super()函数的基本用法是在子类的方法中调用父类的方法,它的语法如下:super().meth……

    2024-03-07
    089
  • python不支持的数据类型有 char. int

    Python是一种非常强大的编程语言,它拥有大量的库和模块,可以完成各种各样的任务,有些函数在Python中是不被支持的,这可能是因为设计者认为这些函数可能会导致代码混乱,或者存在更好的替代方案,以下是一些Python不支持的函数:1、全局变量声明:在一些编程语言中,如C++,我们可以使用关键字来声明全局变量,但在Python中,我们……

    2024-03-01
    0112

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入