【问题标题】:python: Imported class does not change, when edited, saved and reimportedpython:导入的类在编辑、保存和重新导入时不会改变
【发布时间】:2015-08-12 16:43:04
【问题描述】:

我是 Python 新手,正在尝试理解类。不确定以下错误是来自使用我的 IDE(即 Spyder)还是预期的行为。

我在文件C:\mydir\class_def.py 中定义了一个类message。以下是文件包含的内容:

class message:
    def __init__(self,msg1,msg2):
        self.msg1 = msg1
        self.msg2 = msg2

如果我想执行代码,我还有另一个脚本,称为execute.py。在这个脚本中,我导入类并创建类对象的实例。这是脚本execute.py中的代码:

import os
os.chdir('C:\mydir')
from class_def import message

message_obj = message('Hello','world')

到目前为止没有问题!

然后我将class_def.py 编辑为以下内容:

class message:
    def __init__(self,msg1):
        self.msg1 = msg1

并编辑execute.py 以匹配新类,因此删除message 的一个输入:

   import os
   os.chdir('C:\mydir')
   from class_def import message

   message_obj = message('Hello')

我收到以下错误:

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

似乎 Python 保留了旧版本的 class_def.py 并且不导入新版本,即使它已保存。

这是正常行为还是 Spyder 做了一些有趣的事情?

【问题讨论】:

  • 我不明白这一点。新的 __init 方法只需要 2 个参数,而您传递了三个参数(隐式 self、hello 和 world)。因此必须出现错误!
  • 哦,是的,对不起...有点混淆了。将立即编辑...
  • 我刚刚编辑了这个问题。问题是即使我更改了class_def.py,消息类也不会改变。因此,当我使用消息的新定义时,似乎 pythin “记住”了其他定义。

标签: class python-2.7 python-import


【解决方案1】:

如果您有 .pyc 文件,例如 class_def.pyc,请将其删除。 我会删除您工作目录中的所有 .pyc 文件,然后重试。如果这不起作用,也许您没有使用您认为的模块?为了确定尝试类似:

import myModule
print myModule.__file__ #This will give you the path to the .pyc file your program loaded

#or 
import myModule
import os
print os.path.dirname(myModule.__file__)

试试这些,这样您就可以确定您实际上正在使用您正在修改的文件。希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2019-05-01
    • 2011-07-31
    • 2014-11-03
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多