【问题标题】:Why does Visual Studio Code insert "return super().__init__(self)" into the derived class?为什么 Visual Studio Code 将“return super().__init__(self)”插入派生类?
【发布时间】:2019-08-09 18:18:57
【问题描述】:

我理解 __init__() is required to return None,但是当 Visual Studio 为我自动完成派生类 __init__() 时,它会这样做:

class Base:
    def __init__(self):
        print('Base')

class Derived(Base):
    def __init__(self):
        return super().__init__()  # This part is added by VS Code

这显然不是语法问题,因为 Base __init__ 正在返回 None,而派生类也将返回。

但是为什么还要麻烦呢? return 语句在这里有什么作用?

【问题讨论】:

  • 是的,这很奇怪。
  • 无论是__init__还是常规方法,只要您在父类中调用某些东西,它可能会默认执行此操作?所以它以这种方式自动完成它,因为这就是它生成继承方法的基本实现的方式。
  • 因为 VS Code 很笨? __init__ 永远不应该返回值。将其添加到 5000 多个其他错误中here
  • @wim 做了一些挖掘,似乎已经报告了:github.com/microsoft/python-language-server/issues/1082
  • @d_kennetz 我认为没有人称 VS Code 的 开发人员 愚蠢;不过,这是对代码的准确描述,从“它没有被编程为在__init__ 和其他函数之间[智能] 区分”的意义上说。

标签: python inheritance super


【解决方案1】:

根据@Simeon Visser's comment,VS Code 似乎对所有继承的方法都这样做,并且不区分__init__() 和其他方法。 Python 语言服务器 repo 中有 already been filed 的问题。 问题 has been fixed

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 2013-06-20
    相关资源
    最近更新 更多