72

我有一堆要重命名的类。其中一些名称很小,并且该名称在其他类名中重复使用,我不希望更改该名称。其中大部分存在于 Python 代码中,但我们也有一些引用类名的 XML 代码。

简单的搜索和替换只能让我到目前为止。就我而言,我想将 AdminAction 重命名为 AdminActionPlug 并将 AdminActionLogger 重命名为 AdminActionLoggerPlug,因此第一个的搜索和替换也会错误地命中第二个。

有没有人有使用 Python 重构工具的经验?如果他们也可以修复 XML 文档中的类名,则可以加分。

4

7 回答 7

58

与此同时,我尝试了两个与 vim 有某种集成的工具。

第一个是Rope,一个带有 Vim(和 emacs)插件的 python 重构库。我尝试了一些重命名,并且确实按预期工作。它允许我将重构预览为差异,这很好。它有点文本驱动,但这对我来说没关系,只是需要更长的时间来学习。

第二个是自行车修理工,我猜它会在名字上赢得积分。还可以插入 vim 和 emacs。还没有玩太多,但我记得很久以前尝试过。

两者都玩得还不够,或者尝试了更多类型的重构,但我会用它们做更多的黑客攻击。

于 2008-08-27T09:15:42.863 回答
26

我强烈推荐PyCharm——不仅仅是重构。自从几年前在这里发布第一个 PyCharm 答案以来,PyCharm 中的重构支持有了显着改善。

PyCharm 中可用的 Python 重构(最后一次在 PyCharm 2016.2 中检查 2016/07/27)

  • 更改签名
  • 转换为 Python 包/模块
  • 复制
  • 提取重构
  • 排队
  • 反转布尔值
  • 制作顶级函数
  • 移动重构
  • 将成员向下推
  • 拉起成员
  • 重命名重构
  • 安全删除

XML 重构(我在 XML 文件的上下文菜单中检查):

  • 改名
  • 移动
  • 复制
  • 将子查询提取为 CTE
  • 排队

Javascript 重构:

  • 在 JavaScript 中提取参数
  • JavaScript 中的更改签名
  • 在 JavaScript 中提取变量
于 2014-10-15T11:34:58.193 回答
5

WingIDE 4.0(WingIDE 是我选择的 python IDE)将支持一些重构,但我刚刚试用了最新的 beta、beta6 和……还有工作要做。Retract Method 工作得很好,但 Rename Symbol 不行。

更新:4.0 版本修复了所有重构工具。他们现在工作得很好。

于 2011-02-03T02:57:10.237 回答
5

我会看看Bowler ( https://pybowler.io )。

它比rope 更适合直接从命令行使用,并且鼓励编写脚本(一次性脚本)。

于 2018-09-27T14:28:04.523 回答
4

您的 IDE 可以支持重构!检查一下,Eric、Eclipse、WingIDE 已经内置了重构工具(包括重命名)。这是非常安全的重构——如果出现问题,IDE 不会做 ref。

还可以考虑添加一些单元测试以确保您的代码在重构期间不会受到影响。

于 2009-11-28T18:07:40.243 回答
4

PyCharm有一些重构功能。

Python重构

重命名重构允许安全、即时地执行全局代码更改。文件中的本地更改是就地执行的。重构适用于普通的 Python 和 Django 项目。

使用Introduce Variable/Field/ConstantInline Local改进方法内的代码结构,Extract Method分解更长的方法,Extract SuperclassPush UpPull DownMove移动方法和类。

于 2014-09-10T12:21:58.043 回答
-2

您可以使用 sed 来执行此操作。诀窍是回想正则表达式可以识别单词边界。只要您获得工具,这适用于所有平台,在 Windows 上是 Cygwin,Mac OS 可能需要安装开发工具,我不确定,Linux 开箱即用。所以 grep、xargs 和 sed 应该可以解决问题,经过 12 小时阅读手册页和反复试验;)

于 2012-12-26T22:12:43.023 回答