Python 在这种情况下是否有必要使用super()。\uuuu init\uuuuuu()?

Python 在这种情况下是否有必要使用super()。\uuuu init\uuuuuu()?,python,hierarchy,Python,Hierarchy,编辑: 哦,对不起,伙计们。这个问题是重复的,但不是链接问题的重复。我已经在这个问题中找到了我需要的,也许下次我应该尝试更多的关键词来搜索 在我的例子中,我在类StrKeyDict(dict)中实现update,\uuuuuuu setitem\uuuuuu,并且继承自dict的新的

编辑: 哦,对不起,伙计们。这个问题是重复的,但不是链接问题的重复。我已经在这个问题中找到了我需要的,也许下次我应该尝试更多的关键词来搜索

在我的例子中,我在类
StrKeyDict(dict)
中实现
update
\uuuuuuu setitem\uuuuuu
,并且继承自
dict
新的
可能会创建一个空的
dict
,以确保
更新
可以工作,我认为没有必要再次使用
super()

代码来自fluentpython

当我们使用

d = StrKeyDict(a=1,b=2) 
例如,要创建实例d,实际情况是:

1.调用从超类
dict
继承的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
来创建一个空的
dict
实例

2.调用
\uuuu init\uuuu
初始化实例

正如我所说,我在类
StrKeyDict(dict)
中实现了
update
\uuuuuuuuuu设置项
。所以有必要在这里使用
super()。

谢谢大家!

一般来说,这是必要的。而且它经常需要成为init中的第一个调用。它首先调用父类的init函数(
dict
)。
它通常创建其底层数据结构

一般来说,这是必要的。而且它经常需要成为init中的第一个调用。它首先调用父类的init函数(
dict
)。
它通常创建其底层数据结构

超类“
\uuuu init\uuuu()
可能正在或可能没有执行初始化它所必需的操作。如果你知道是什么情况,你可以做出明智的决定。如果你不知道,最好打电话以防万一

现在,如果您不调用它,因为它是不必要的,并且基类的实现以一种必要的方式进行更改,那么您将不得不修复它

另一方面,在一些情况下,调用超类
\uuuu init\uuuu()
是个坏主意,例如,如果它执行非常特定于超类的繁重计算,并且在子类中是不同的


FWIW我的方法总是调用
super()。\uuuu init\uuuu()
,除非我有充分的理由不调用它。

超类“
\uuuu init\uuuu()
可能正在或可能没有做一些必要的事情来初始化它。如果你知道是什么情况,你可以做出明智的决定。如果你不知道,最好打电话以防万一

现在,如果您不调用它,因为它是不必要的,并且基类的实现以一种必要的方式进行更改,那么您将不得不修复它

另一方面,在一些情况下,调用超类
\uuuu init\uuuu()
是个坏主意,例如,如果它执行非常特定于超类的繁重计算,并且在子类中是不同的


FWIW我的方法总是调用
super()。\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,从
dict
继承而来的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
可能会创建一个空的
dict
来确保
更新可以工作,我认为没有必要再次使用
super()?特别是如果你只是想和每个人争论,你不想得到答案,你想被告知你是对的,你不是。我不是这个意思。问题出了点问题,我又编辑了一遍。“super()。\uuu init\uuu()
”的含义可能被误解,因此我将其改为“在这种情况下是否有必要使用
super()。\uu init\uuu()
”。顺便说一句,我已经运行了这段代码,没关系,所以我只想知道这是不是“必要的”。我不明白这是一个重复的链接问题。这是关于传递给
super()。\uuuu init()
,而不是关于是否应该调用它。
super()。\uuuu init\uuuu()
与它在其他任何地方做的事情相同,它在超类上调用
\uu init\uuuuuuuuuu()
,从
dict
继承而来的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
可能会创建一个空的
dict
来确保
更新可以工作,我认为没有必要再次使用
super()?特别是如果你只是想和每个人争论,你不想得到答案,你想被告知你是对的,你不是。我不是这个意思。问题出了点问题,我又编辑了一遍。“super()。\uuu init\uuu()
”的含义可能被误解,因此我将其改为“在这种情况下是否有必要使用
super()。\uu init\uuu()
”。顺便说一句,我已经运行了这段代码,没关系,所以我只想知道这是不是“必要的”。我不明白这是一个重复的链接问题。这是关于如何传递给
super()。\uu init()
,而不是关于是否应该调用它。我认为您所说的“创建其底层数据结构”是
super()的主要目的。在这种情况下,您所说的“创建其底层数据结构”是
super()的主要目的在这种情况下,.\uuu init\uuu()
d = StrKeyDict(a=1,b=2)