首页 热点资讯 义务教育 高等教育 出国留学 考研考公

python中的super()是什么意思呢

发布网友 发布时间:2022-04-26 21:30

我来回答

2个回答

懂视网 时间:2022-04-29 16:42

一、单独调用父类的方法

需求:编写一个类,然后再写一个子类进行继承,使用子类去调用父类的方法1。

使用方法1打印: 胖子老板,来包槟榔。

那么先写一个胖子老板的父类,执行一下:

class FatFather(object):
 def __init__(self, name):
 print('FatFather的init开始被调用')
 self.name = name
 print('FatFather的name是%s' % self.name)
 print('FatFather的init调用结束')
def main():
 ff = FatFather("胖子老板的父亲")

运行一下这个胖子老板父类的构造方法init 如下:

if __name__ == "__main__":
 main()
FatFather的init开始被调用
FatFather的name是胖子老板的父亲
FatFather的init调用结束

好了,那么下面来写一个子类,也就是胖子老板类,继承上面的类。

# 胖子老板的父类
class FatFather(object):
 def __init__(self, name):
 print('FatFather的init开始被调用')
 self.name = name
 print('调用FatFather类的name是%s' % self.name)
 print('FatFather的init调用结束')
# 胖子老板类 继承 FatFather 类
class FatBoss(FatFather):
 def __init__(self, name, hobby):
 print('胖子老板的类被调用啦!')
 self.hobby = hobby
 FatFather.__init__(self, name) # 直接调用父类的构造方法
 print("%s 的爱好是 %s" % (name, self.hobby))
def main():
 #ff = FatFather("胖子老板的父亲")
 fatboss = FatBoss("胖子老板", "打斗地主")

在这上面的代码中,我使用FatFather.init(self,name)直接调用父类的方法。

运行结果如下:

if __name__ == "__main__":
 main()
胖子老板的类被调用啦!
FatFather的init开始被调用
调用FatFather类的name是胖子老板
FatFather的init调用结束
胖子老板 的爱好是 打斗地主

二、super() 方法基本概念

除了直接使用 FatFather.init(self,name) 的方法,还可以使用super()方法来调用。

那么首先需要看super()方法的描述和语法理解一下super() 方法的使用。

2.1 描述

super() 函数是用于调用父类(超类)的一个方法。

super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。

热心网友 时间:2022-04-29 13:50

super就是在子类中调用父类方法时用的。

class FooParent(object):  
    def __init__(self):  
        self.parent = 'I\'m the parent.'  
        print 'Parent'  
      
    def bar(self,message):  
        print message,'from Parent'  
  
class FooChild(FooParent):  
    def __init__(self):  
        super(FooChild,self).__init__()  #调用父类初始化方法
        print 'Child'  
          
    def bar(self,message):  
        super(FooChild, self).bar(message)  #调用父类bar方法
        print 'Child bar fuction'  
        print self.parent  
  
if __name__ == '__main__':  
    fooChild = FooChild()  
    fooChild.bar('HelloWorld')

如果解决了您的问题请采纳!
如果未解决请继续追问

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com