【发布时间】:2014-03-19 07:18:21
【问题描述】:
我正在学习 python,遇到了需要更改函数行为的情况。我最初是一名 Java 程序员,所以在 Java 世界中,函数的更改会让 Eclipse 显示 Java 中的很多源文件都有错误。这样我就可以知道哪些文件需要修改。但是考虑到没有类型,如何在 python 中做这样的事情?!我正在使用 TextMate2 进行 python 编码。
目前我正在做蛮力的方式。打开每个 python 脚本文件并检查我在哪里使用该函数,然后修改。但我敢肯定这不是处理大型项目的方式!!!
编辑: 例如,我在 python 脚本文件中定义了一个名为 Graph 的类。 Graph 有两个对象变量。我在许多脚本文件中创建了这个类的许多对象(每个对象都有不同的名称!!!),然后决定我要更改对象变量的名称!现在我正在浏览每个文件并再次阅读我的代码,以便再次更改名称:(。请帮助!
示例:文件A 具有类C 的对象x,y,z。文件B 具有类C 的对象xx,yy,zz。类C 有两个实例变量名称,应将Foo 更改为Poo 和Foo1 更改为Poo1。还要考虑许多文件,例如 A 和 B。你会怎么做才能解决这个问题?您是否真的要打开每个文件并搜索 x,y,z,xx,yy,zz 然后单独更改名称?!!!
【问题讨论】:
-
您启动应用程序并查看出现了什么问题,或者您使用分析器/语法检查来为您进行检查?或者您自己跟踪您的代码,没有人比您更了解您的代码。此外,您所描述的不是 Java 或 Python 的东西,而是 IDE 的东西。它是跟踪更改并将其呈现给您的 IDE。我猜你可以通过使用 Eclipse for Python 来实现同样的目标?
-
@Torxed:这听起来像是 Java 的事情,因为方法上的 Java 多态性很糟糕:我们需要为同一个方法编写 99 个签名。而不是 Python 方式:使用默认参数定义一次方法,然后根据传递的 arg(s) 的类型/类找出正确的做法。
-
我对您的代码示例的反应:您不应该直接从客户端代码(即文件 A、B)引用成员变量。他们应该打电话给getter/setter method on the object, or to be more Pythonic, a property。您的客户端代码永远不需要知道内部数据成员名称(没有 myobj.mymember 引用!)。 但您仍在描述问题的症状,而不是问题本身。您的客户端代码实际上试图对数据成员 Poo、Poo1 做什么?
-
“
Graph有两个对象变量”。这并不能告诉我们太多。但是它们是干什么用的?继任者和有效载荷?前任和后继者? ...?
标签: python migration dynamic-typing