我是PyCharm的新手,但长期使用IntelliJ。在IntelliJ中,当您编写类定义时,IDE可以根据实例变量自动生成构造函数、equals()方法和hashCode()方法。这不仅有助于节省输入时间,还可以防止意外错误,并自动引入一些equals()和hashCode()最佳实践。我希望PyCharm也能做到这一点,考虑到这两个产品来自同一家公司。经过大量搜索和查找文档,我没有找到任何关于__eq__()或__hash__()的信息。尽管Python实例变量没有明确指定,但我希望生成器可以遵循一种约定,例如提供所有__init__()参数作为潜在的实例变量。至于__init__(),我发现了一些自动添加实例变量设置的方法到__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中很容易实现等效功能。
def
,它成功运行了。但是它没有生成这些方法的实际主体 - 除非我使用它的方式不正确? - sparc_spreadpass
,你可以写任何你喜欢的东西,并将其放在那个位置,但是,使这些主体通用是一个棘手的问题,我认为。例如,您可以给出一个通用的__hash__()的示例吗? - OYRM__eq __()
,我正在寻找类似于我在我的OP中添加的示例的内容。对于__hash __()
,此问题中显示的实现看起来不错-在与__eq __()
中比较的相同事物的元组上调用hash()
。问题是我不认为PyCharm live模板语言本身足够丰富,可以根据变量输入迭代生成代码块。我找了又找,但我仍然可能弄错了。 - sparc_spread__eq __()
部分,遵循了最佳实践,如果比较的类不同,则返回NotImplemented
。 - sparc_spread