我是 PyCharm 的新手,但却是 IntelliJ 的长期用户。在 IntelliJ 中,当您编写类定义时,IDE 可以根据实例变量自动生成构造函数、equals()
方法和 hashCode()
方法。这不仅有利于节省键入时间,而且有助于防止无意中的错误以及自动引入一些 equals()
和 hashCode()
最佳实践。
鉴于产品来自同一家公司,我希望 PyCharm 也能做到这一点。在对文档进行大量谷歌搜索和搜索之后,我找不到任何关于 __eq__()
或 __hash__()
的内容。诚然,Python 实例变量没有明确指定,但我希望生成器可以遵循一个约定,比如提供所有 __init()__
参数作为潜在的实例变量。至于__init__()
,我found something that will automatically add instance variable settings到 __init__()
中,但这种方法似乎比直接键入更麻烦,而且它甚至没有将实例变量作为参数添加到 __init__()
签名中。
我是否遗漏了文档中的任何内容,或者也许有一个插件可以做到这一点?
更新:明确地说,我正在寻找能够生成这些方法的实际实现的东西。也就是说,如果我有一个名为 Point
的类,并且 PyCharm 知道我的类有 x
和 y
实例变量,那么它会自动生成这个对于 __eq__()
方法:
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 中很容易完成。
最佳答案
您可以创建一个 Live Template
在文件->设置->编辑器->实时模板下 寻找 python 单击 + 添加,然后我将我的命名为“类”,并确保在 Python 文件的 gui 中添加上下文。
模板文本:
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 似乎不支持变量。例如,实时模板文本中的条件句或列表扩展似乎不可用。
关于python - PyCharm 能否自动生成 __eq__() 和 __hash__() 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30353939/