Python类编译后无法更新

2024-04-24 23:56:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚从Python开始,几天前,来自C++背景。当我编写一个类,通过一个脚本调用它,然后更新类的接口时,我发现一些行为非常不直观。你知道吗

一旦编译成功,类似乎就不再是可变的了。举个例子:

你知道吗测试模块.py地址:

class testClass:
    def __init__(self,_A):
        self.First=_A

    def Method(self, X, Y):
        print X

你知道吗测试脚本.py地址:

import testModule

tm=testModuleB.testClass(10)
tm.Method(3, 4)

死刑给了我

3

现在我更改Method的参数列表:

def Method(self, X):

,我删除测试模块.pyc在我的剧本里

tm.Method(3)

结果,我得到了

TypeError: Method() takes exactly 3 arguments (2 given)

我做错什么了?为什么脚本不使用类的更新版本?我使用Canopy编辑器,但是我也看到了python.exe翻译。你知道吗

如果之前有人问过类似的问题,我会道歉的。我没有发现与此相关的问题。你知道吗


Tags: 模块pyself脚本init地址defmethod
3条回答

testModule已加载到解释器中。删除pyc文件不会改变任何事情。您需要执行reload(testModule),或者更好地重新启动解释器。你知道吗

Python将代码对象加载到内存中;class语句在第一次导入文件时执行,一个类对象被创建并存储在模块名称空间中。后续导入将重用已创建的对象。你知道吗

.pyc文件仅在Python会话第一次导入模块时使用。替换文件不会导致模块重新加载。你知道吗

可以使用^{} function强制Python用磁盘上的新代码替换已经加载的模块。请注意,对类的任何和所有其他直接引用都不会被替换;testClass类的实例(tm在您的例子中)仍然会引用旧的类对象。你知道吗

在开发代码时,重启Python解释器并重新开始通常更容易。这样你就不必担心寻找所有的直接引用并替换它们。你知道吗

删除.pyc文件无法更改您的案例。当您第一次在解释器上导入模块时,它会被完全加载到解释器上,删除文件或修改不会改变任何东西。你知道吗

最好重新启动解释器或使用内置的reload函数。你知道吗

相关问题 更多 >