我想来自
class Sum:
def __init__(self, a, b):
self._a = a
self._b = b
def evaluate(self):
return self._a + self._b
到
def add(a, b):
return a + b
class Sum:
def __init__(self, a, b):
self._a = a
self._b = b
def evaluate(self):
return add(self._a, self._b)
即从方法evaluate
中提取表达式self._a + self._b
作为“自由函数”(不是方法的函数)。这可能与PyCharm的自动重构有关吗?
答案 0 :(得分:1)
没有直接的方法来做你想做的事,但你可以解决它:
self._a + self._b
语句,右键单击>重构>提取物>方法,或 Ctrl + Alt + M add
)>好。这将生成一个名为given的类函数。该过程还将重构用法以匹配您的情况。self
,添加a
,b
等。self.
。您可以通过查找和替换来执行此操作:self.
>将第二个搜索栏留空并从文件开头开始,单击替换按钮,直到所有内容都正确无误。evaluate
功能中删除将在生成的函数名称之前生成的self.
。同时将正确的参数传递给函数(例如return add(self.a, self.b)
)你已经完成了,这是一项工作,并没有那么多的自动化,但它会节省你一些打字时间!
这是在PyCharm 2017.1专业版
中测试的答案 1 :(得分:0)
我不知道这是否可以通过单次重构来完成,但它可以通过3-4步完成几乎完全自动化:
详细步骤:
self._a + self._b
)按 Ctrl + Alt + M
或
从选择的上下文菜单中选择重构> 提取>的方法... 强>
add
),然后点击确定。结果如下:
class Sum:
def __init__(self, a, b):
self._a = a
self._b = b
def evaluate(self):
return self.add()
def add(self):
return self._a + self._b
现在,让我们将新方法从类中拉出来并将其转换为模块级函数:
按 F6
或
从上下文菜单中选择重构>的移动... 强>
结果如下:
class Sum:
def __init__(self, a, b):
self._a = a
self._b = b
def evaluate(self):
return add(self._a, self._b)
def add(_a, _b):
return _a + _b
正如您所看到的,重构已经正确地用操作数的两个参数替换了self
参数。不幸的是,它使用了相应“隐藏”实例成员的_...
名称。
_
)或函数使用参数的位置按 Shift + F6
或
从选择的上下文菜单中选择重构>的重命名... 强>
重复其他函数参数。
(在您想要选择完全不同的名称的情况下,只需将光标放入参数名称即可更改而不选择其中的一部分。然后整个名称将在对话框输入字段中开始选择,并且可以被覆盖输入新内容。)
结果如下:
class Sum:
def __init__(self, a, b):
self._a = a
self._b = b
def evaluate(self):
return add(self._a, self._b)
def add(a, b):
return a + b
(或者你想放置的地方)
正如您所看到的,PyCharm在课后放置了新的顶级功能。我想在它之前拥有它。按照John's answer中的建议移动 Shift + Alt + ↑在GNOME的PyCharm 2016.3.2中对我不起作用,所以我刚刚选择了这个函数,并用 Crtl + x 剪切它并用 Crtl + v粘贴到我想要的地方