gpt4 book ai didi

python - 将函数/方法移动到类

转载 作者:太空狗 更新时间:2023-10-30 01:26:37 24 4
gpt4 key购买 nike

使用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)

期望:

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()

我基本上是在尝试获得相反的功能:“将函数/方法移动到顶层”

如这里所述: https://www.jetbrains.com/help/pycharm/2017.1/move-refactorings.html

我不介意接受一个没有初始化参数的类。

最佳答案

默认情况下没有这样的选项:PyCharm 非常擅长重构类和方法,但不能对独立函数做很多事情。不过,您的问题有一个解决方案:正则表达式!

基本上,您需要做的是:

  1. 将函数更改为有界方法(您已经在示例中这样做了)
  2. 用重构的方法替换所有旧方法调用。

对于上述示例,这是可以让您执行此操作的正则表达式:

([\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]*\)

这里是替换:

$2\.demo()

现在您可以在 PyCharm 中选择 Edit -> Find -> Replace in Path,选中正则表达式选项,将第一个正则表达式粘贴到第一个字段,将第二个正则表达式粘贴到下一个字段。我已经用一个文件在本地进行了测试,效果很好。这是regex101 example所以你可以玩它并测试它。

如果您经常使用该方法,这将很有用,否则手动执行该操作可能会更快。

关于python - 将函数/方法移动到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44031133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com