gpt4 book ai didi

python - 什么时候调用 Python 的 super().__init__()?

转载 作者:太空狗 更新时间:2023-10-29 21:28:55 27 4
gpt4 key购买 nike

(经过一些谷歌搜索后,我无法在任何地方找到关于此事的引用。)

这个场景可以用这个简短的代码示例清楚地展示:

class X:
def __init__(self, stuff):
self.__stuff = stuff

class Y(X):
def __init__(self, stuff):
# Is it safe to execute statements before calling super.__init__()?
new_stuff = self.call_another_method(stuff)
super(Y, self).__init__(new_stuff)

使用 CPython 3.x,上述代码示例有效——假设 call_another_method() 存在。这种编码风格通常是安全的,但不受欢迎或被认为是非 Pythonic 的?我找不到关于此事的建议。

我为什么要关心?

我的背景来自更传统的面向对象的编程语言,例如 C++、C# 和 Java,其中“super”必须严格作为子类构造函数中的第一条语句调用——忽略零参数、隐式情况。

如果重要的话,我是一个年轻的 Pythoneer:3+,拜托。

最佳答案

是的,在 super() 之前调用其他东西是绝对安全的。 Python 不设置顺序,对此有很多用例。

请注意 super().__init__() 调用在 Python 中只是另一个表达式,它不是语法结构。您也可以在外部方法中使用 super(),例如,只要您传入正确的参数即可。

在您的情况下,您可以省略类型和实例参数,当 super() 不带参数调用时,Python 3 将为您检索这些参数,因为您在一个定义在内部的函数中使用它类:

class Y(X):
def __init__(self, stuff):
new_stuff = self.call_another_method(stuff)
# super(Y, self) is implicit here:
super().__init__(new_stuff)

关于python - 什么时候调用 Python 的 super().__init__()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26946869/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com