首页 > 解决方案 > 使超级方法的 PyCharm 自动完成参数

问题描述

考虑以下代码:

class A:
  def __init__(self, foo=None):
    pass

class B(A):
  def __init__(self, bar=None, **kwargs):
    super().__init__(**kwargs)

当我开始输入B(时,PyCharmbar会在自动完成窗口、快速文档等中有用地显示。但是,它不会显示foo.

我已经诉诸于foo对 class 进行明确的论证B,但这会变得高度重复,因为我有很多这样的论点。我想避免这样做,同时仍然让 PyC​​harm 向我展示所有论点。

我怎样才能让 PyC​​harm 做到这一点?

标签: pythonautocompletepycharm

解决方案


简短的回答是你不能。这是因为 PyCharm 在您键入时不会运行您的代码。Python 是一种具有多继承性的动态语言,IDE 很难检查所有基类中的所有参数,尤其是因为与 Java 不同,对基类__init__()函数的调用可以省略。

还要注意这个片段:

class B(A):
  def __init__(self, bar=None, **kwargs):
    super().__init__(**kwargs)

强制foo只能作为关键字参数而不是位置参数传递,而 A 类允许它作为位置参数传递。

但是,如果键入是一个问题,我会建议 ctrl+O 这是一个覆盖的快捷方式。如果您在一个空类中执行此操作,它将创建一个__init__()方法,其中包含来自基类的参数和对 super 的调用。如果文档有问题,只需为该方法编写一个文档字符串


推荐阅读