python super()函数

Posted hwnzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python super()函数相关的知识,希望对你有一定的参考价值。

super()函数是用于调用父类的一个方法。举个例子:

执行下面代码时,会显示Son类没有属性money

class Father:
    def __init__(self):
        self.money = 1000class Son(Father):
    def __init__(self):
        self.age = 10

    def show_father_money(self):
        print(self.money)


a = Son()
a.show_father_money()  # 执行出错,显示 AttributeError: ‘Son‘ object has no attribute ‘money‘

所以如果没有用构造方法【__init__】初始化父类的值就无法调用相应属性,这时候我们可以将代码改为:

class Father(object):
    def __init__(self):
        self.money = 1000
class Son(Father):
    def __init__(self):
        Father.__init__(self)  # 调用父类构造函数
        self.age = 10

    def show_father_money(self):
        print(self.money)


a = Son()
a.show_father_money()  # 1000

这样就可以正常执行了,但是在实际运用中,由于子类继承的父类可能会改变名字,并且子类可能不止只继承一个父类,所以出于方便的角度考虑,我们就可以调用super()方法,super()方法通过MRO列表【可通过打印Son.mro()查看】来解决多重继承问题。super()可自动查询并执行MRO列表中父类相应的方法。

class GrandFather(object):
    def __init__(self):
        self.money1 = 1000


class Father(GrandFather):
    def __init__(self):
        super().__init__()
        self.money2 = 2000


class Son(Father):
    def __init__(self):
        super().__init__()
        self.age = 10

    def show_father_money(self):
        print(self.money1)
        print(self.money2)


a = Son()
a.show_father_money() # 1000 2000

 

以上是关于python super()函数的主要内容,如果未能解决你的问题,请参考以下文章

python之类中的super函数

Python内置函数之super()

python super()函数

不立即分离片段

Python中的super函数,你熟吗?

想了解Python中的super 函数么