在Python 2.7.6中重新加载(Class)

时间:2016-02-04 11:14:13

标签: python-2.7 class module reload

我想在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。

1 个答案:

答案 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'

中读到这个