python - 使超级方法的 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
,但这会变得高度重复,因为我有很多这样的论点。我想避免这样做,同时仍然让 PyCharm 向我展示所有论点。
我怎样才能让 PyCharm 做到这一点?
解决方案
简短的回答是你不能。这是因为 PyCharm 在您键入时不会运行您的代码。Python 是一种具有多继承性的动态语言,IDE 很难检查所有基类中的所有参数,尤其是因为与 Java 不同,对基类__init__()
函数的调用可以省略。
还要注意这个片段:
class B(A):
def __init__(self, bar=None, **kwargs):
super().__init__(**kwargs)
强制foo
只能作为关键字参数而不是位置参数传递,而 A 类允许它作为位置参数传递。
但是,如果键入是一个问题,我会建议 ctrl+O 这是一个覆盖的快捷方式。如果您在一个空类中执行此操作,它将创建一个__init__()
方法,其中包含来自基类的参数和对 super 的调用。如果文档有问题,只需为该方法编写一个文档字符串
推荐阅读
- java - 如何使用@KafkaListener spring boot 2 消费者获取消费者 ID
- excel - 在工作表中找不到 ListOjbect 表
- mysql - 自动填充 SELECT
- azure - 将应用访问令牌与用户访问令牌关联以调用 Azure REST API
- terraform - 使用 Terraform 在 Composer GKE 集群中创建 Kubernetes Secret
- javascript - (反应)按钮单击不适用于 Beautiful DnD
- javascript - 无法通过 IE11/es5 的 botframework-webchat 中的自定义存储/调度发送消息
- ruby-on-rails - 设计覆盖自定义电子邮件视图
- c# - .Select() 中的多个元素
- node.js - Nestjs/Typeorm 正在将“_rid”添加到我的关系名称中