ori*_*ral 5 python refactoring automated-refactoring pycharm
我希望使用pycharm将方法重构为一个类。(可以使用静态方法)当前:
import math
class Solver(object):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def demo(b, a, c):
d = b ** 2 - 4 * a * c
if d >= 0:
disc = math.sqrt(d)
root1 = (- b + disc) / (2 * a)
root2 = (- b - disc) / (2 * a)
print(root1, root2)
return root1, root2
else:
raise Exception
s = Solver(2, 123, 0.025)
demo(s.b, s.a, s.c)
Run Code Online (Sandbox Code Playgroud)
期望的:
import math
class Solver(object):
def __init__(self,a,b,c):
self.a = a
self.b = b
self.c = c
def demo(self, a, b, c):
d = self.b ** 2 - 4 * self.a * self.c
if d >= 0:
disc = math.sqrt(d)
root1 = (- self.b + disc) / (2 * self.a)
root2 = (- self.b - disc) / (2 * self.a)
print(root1, root2)
return root1, root2
else:
raise Exception
Solver(2, 123, 0.025).demo()
Run Code Online (Sandbox Code Playgroud)
我基本上是想获得相反的功能: “将功能/方法移至顶层”
如此处所述:https : //www.jetbrains.com/help/pycharm/2017.1/move-refactorings.html
我不介意选择没有初始化参数的课程。
默认情况下没有这样的选项:PyCharm 非常擅长重构类和方法,但不能对独立函数做太多事情。不过,您的问题有一个解决方案:正则表达式!
基本上,你需要做的是:
这是正则表达式,它可以让您为上述示例执行此操作:
([\w]+)[ \t]+=[ \t](Solver[ \t]*\(([\d.]+)[ \t]*,[ \t]*([\d.]+)[ \t]*,[ \t]*([\d.]+)[ \t]*\))\n\r?demo[ \t]*\(\1\.b[ \t]*,[ \t]*\1\.a[ \t]*,[ \t]*\1\.c[ \t]*\)
Run Code Online (Sandbox Code Playgroud)
这是替代品:
$2\.demo()
Run Code Online (Sandbox Code Playgroud)
现在您可以Edit -> Find -> Replace in Path在 PyCharm中选择,检查正则表达式选项,将第一个正则表达式粘贴到第一个字段,然后将第二个粘贴到下一个字段。我已经用一个文件在本地进行了测试,效果很好。这是regex101 示例,因此您可以使用它并对其进行测试。
如果您经常使用该方法,这将很有用,否则手动执行此操作可能会更快。
| 归档时间: |
|
| 查看次数: |
1427 次 |
| 最近记录: |