我想在shell(或脚本)中reload()
我的模块,我收到错误。
我更改了 def_class.py 文件中的课程 defnClass 的内容,并希望reload
,但获得例外:
NameError: name 'def_class' is not defined.
该文件位于我启动shell的目录中。为什么我会收到此错误?
PS:如果我重新启动shell,当然一切正常。
我的代码:
class defnClass:
d = 33.45
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def add(self):
return self.a + self.b + self.c
def mult(self):
return self.a * self.b * self.c
def sub(self):
return self.a - self.b - self.c
def div(self, n):
return 12 / n
然后我在使用它之后将此代码更改为以下内容:
class defnClass:
d = 33.45
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def add(self):
return self.a + self.b + self.c + self.div(3)
def mult(self):
return self.a * self.b * self.c
def sub(self):
return self.a - self.b - self.c
def div(self, n):
return 12 / n
然后我尝试使用reload(def_class)
保存后在shell中导入新版本,从而产生以下结果:
>>> reload(def_class)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'def_class' is not defined
我已经从 def_class.py 文件所在的目录中启动了python-shell。
答案 0 :(得分:2)
如果模块使用from ... import从另一个模块导入对象 ...,为其他模块调用reload()不会重新定义 从它导入的对象 - 解决这个问题的方法是重新执行 从声明,另一个是使用导入和限定名称 (模块。名称)代替。
https://docs.python.org/2/library/functions.html#reload
这就是为什么你应该再次使用from module import class
代替reload(module)
。
但我建议您使用import module
代替from module import class
,并使用module.class()
调用代码中的类, 使用{{1 }}。
你可以在马克罗迪回答 - 'import module' or 'from module import'
中读到这个