不是很理解super函数的作用
Topic source尝试注释了Dict的init函数,并测试以下代码,结果一样
a = Dict(c=1)
print (a)
d = Dict(city = 'Beijing')
print (d)
d.abc = 1
print (d.abc)
print (d)
把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函数。
- 1
未懂世故幻想世态
请问一下,从父类dict继承时,不是已经把dict的方法都继承了吗?为什么还要使用 super函数呢?求各位大神指教一下!