我是PyCharm新手,但是长期使用IntelliJ用户。在IntelliJ中,当您编写类定义时,IDE可以基于实例变量自动生成构造函数equals()
方法和hashCode()
方法。这不仅可以保存输入,还可以防止意外错误,并自动引入一些equals()
和hashCode()
最佳做法。
我希望PyCharm可以做同样的事情,因为这些产品来自同一家公司。经过大量Google搜索和搜索文档后,我无法找到__eq__()
或__hash__()
的任何内容。当然,Python实例变量没有明确指定,但我希望生成器可以遵循一个约定,例如提供所有__init()__
参数作为潜在的实例变量。对于__init__()
,我found something that will automatically add instance variable settings进入__init__()
,但这种方法似乎比单独输入更麻烦,而且它甚至不会将实例变量作为参数添加到{{} 1}}签名。
我是否遗漏了文档中的任何内容,或者是否有可以执行此操作的插件?
更新:要清楚,我正在寻找能够生成这些方法的实际实现的东西。也就是说,如果我有一个名为__init__()
的类,并且PyCharm知道我的类有Point
和x
个实例变量,那么它会自动为y
方法生成这个:
__eq__()
在IntelliJ中可以轻松完成等效操作。
答案 0 :(得分:6)
您可以创建Live Template
在文件 - >设置 - >编辑器 - >实时模板下 寻找Python 单击+添加,然后我将其命名为“class”,并确保在gui中为Python文件添加上下文。
模板文字:
class $class_name$:
"""$class_docstring$"""
def __init__(self, $args$):
"""$init_docstring$"""
pass
def __eq__(self, $other$):
if not isinstance($other$, $class_name$):
return NotImplemented
elif self is $other$:
return True
else:
return self.$eq_field$ == $other$.$eq_field$
def __hash__(self, ):
pass
$END$
我离开了我的“选项” - > “展开时”部分设置为“默认(Tab)” 在此之后,当您键入“class”时,可以使用Tab auto-complete插入实时模板。您的光标将被弹回到实时模板文本中作为变量包含的任何部分。
更复杂,即列表类型,LiveTemplate似乎不支持变量。例如,实时模板文本或列表扩展中的条件似乎不可用。
答案 1 :(得分:1)
选择class
,然后执行以下操作之一:
Alt-Insert
Right Click -> Generate
Menu -> Code -> Generate
答案 2 :(得分:0)
也许您对数据类的概念也感兴趣?
https://docs.python.org/3/library/dataclasses.html
注解隐式生成默认方法。我知道这不是您问题的答案(因为实际上无法看到生成的代码),但可能有助于解释您提出问题的原因。