Discuss / Python / 不是很理解super函数的作用

不是很理解super函数的作用

Topic source

请问一下,从父类dict继承时,不是已经把dict的方法都继承了吗?为什么还要使用 super函数呢?求各位大神指教一下!

尝试注释了Dict的init函数,并测试以下代码,结果一样

a = Dict(c=1)        
print (a)
d = Dict(city = 'Beijing')
print (d)
d.abc = 1      
print (d.abc) 
print (d)

木木氵z

#3 Created at ... [Delete] [Delete and Lock User]

把super这行去掉,根据你的测试方法,我这里a和d返回的是{},我的理解是super这行不是多余的。 尝试回答一下: dict是Python中已经存在的类,我们定义的Dict是一个模仿dict的新类,去继承父类(超类)的属性和方法。 Python的类中有一个特性,当子类不显示调用父类的方法,而父类的方法(函数)中初始化了一些属性,就会出现问题。因此,本例中Dict和dict都有构造函数,Dict只是重写了父类的构造函数,但Dict定义的新的方法中,并没有任何初始化父类dict的属性的代码,因此它必须调用父类方法时必须进行初始化动作。 super方法是一种,可以试着把super这一行替换成:dict.init(self,**kw),结果是一样的。 两者的不同是super可以初始化多个继承的父类或超类,而dict.init方法只能调用当前父类未绑定的方法,也就是说它没有实例需要绑定,可以自由的传入self参数,本例中就是把Dict()的self参数传入。

可能我没表达清楚,我意思是把整个init方法注释掉,如果只是单纯继承父类的init方法,把新类的init方法去掉并不会有影响。但如果你想继承父类init方法的同时对该方法进行修改,那就需要使用super函数。

因为后面的子类重写了 init 方法,相当于覆盖了父类,必须用super函数让他不会受到干扰,super函数就是这个用处的。


  • 1

Reply