我是 PyCharm 新手,但也是 IntelliJ 的长期用户。在IntelliJ中,当你编写类定义时,IDE可以自动生成构造函数,equals()
方法,以及hashCode()
基于实例变量的方法。这不仅有利于节省打字,还可以防止无意的错误并自动输入一些内容equals()
and hashCode()
最佳实践。
我希望 PyCharm 也能做同样的事情,因为这些产品来自同一家公司。经过大量谷歌搜索和文档搜索后,我找不到任何内容__eq__()
or __hash__()
。诚然,Python 实例变量没有明确指定,但我希望生成器能够遵循一个约定,比如提供所有__init()__
参数作为潜在的实例变量。至于__init__()
, I 发现有东西会自动添加实例变量设置 https://confluence.jetbrains.com/display/PYH/Auto-generating+code进入__init__()
,但是这种方法看起来比仅仅打字更麻烦,而且它甚至没有将实例变量作为参数添加到__init__()
签名。
我是否遗漏了文档中的任何内容,或者也许有一个插件可以做到这一点?
Update:需要明确的是,我正在寻找能够生成这些方法的实际实现的东西。也就是说,如果我有一个名为Point
,PyCharm 知道我的班级有x
and y
实例变量,那么它会自动生成这个__eq__()
method:
def __eq__(self, other):
if not isinstance(other, Point):
return NotImplemented
elif self is other:
return True
else:
return self.x == other.x and self.y == other.y
在 IntelliJ 中可以轻松完成等效操作。
您可以创建一个实时模板 https://www.jetbrains.com/pycharm/help/live-templates.html
在文件->设置->编辑器->实时模板下
寻找Python
单击 + 进行添加,然后我将我的命名为“类”,并确保在 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$
我将“选项”->“扩展方式”部分设置为“默认(选项卡)”
此后,当您键入“class”时,您可以使用 Tab 自动完成来插入实时模板。您的光标将弹到实时模板文本中作为变量包含的任何部分。
更复杂的是,即列表类型,LiveTemplate 似乎不支持变量。例如,实时模板文本中的条件或列表扩展似乎不可用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)