kev*_*rpe 8 python subclass super python-3.x
(在谷歌搜索之后,我无法在任何地方找到参考资料.)
可以使用以下简短代码示例清楚地演示该场景:
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)
Run Code Online (Sandbox Code Playgroud)
使用CPython 3.x,上面的代码示例有效 - 假设call_another_method()
存在.这种编码风格通常是安全的,但不赞成或被认为是unPythonic?我无法就此事找到建议.
我为什么在意?
我的背景来自更传统的面向对象编程语言,如C++,C#和Java,其中"super"必须严格地作为子类构造函数中的第一个语句调用 - 忽略零参数,隐式情况.
如果重要的话,我年轻的Pythoneer:3+,拜托.
Mar*_*ers 13
是的,之前打电话给其他人是完全安全的super()
.Python没有设置顺序,并且有很多用例.
请注意,super().__init__()
call 只是 Python中的另一个表达式,它不是语法结构.您也可以使用super()
外部方法,例如,如果您传入正确的参数.
在您的情况下,您可以省略类型和实例参数,Python 3将在super()
没有参数的情况下为您检索这些参数,因为您在类中定义的函数中使用它:
class Y(X):
def __init__(self, stuff):
new_stuff = self.call_another_method(stuff)
# super(Y, self) is implicit here:
super().__init__(new_stuff)
Run Code Online (Sandbox Code Playgroud)