【发布时间】: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