我想学习如何做科学计算面向对象的编码运行模拟访问功能;我正在使用numpy等。我创建了我的第一个课程WC_unit
,它位于./classes/WC_class.py
(子目录)。我在classes
目录中创建了__init__.py
文件(该文件为空)。当导入我的课我失去了其他模块
用于WC_unit
类中的方法需要一些numpy的功能,如EXP
当我从终端运行的代码(在IPython中),采用
%run WC_class.py
我可以生成类的实例E1 = WC_unit()
我可以在其上运行的相关方法,即E1.update()
我真的不能告诉如果它的工作。我在位于的脚本test.py
中写了一些外部代码。 (以上./classes
)来测试我生成的对象,我尝试使用
from classes.WC_class import WC_unit
现在,当我创建类的实例E1
和运行E1.update()
导入类,我得到错误信息global name 'exp' is not defined
。
我试过拨打from numpy import *
或import numpy as np
,并将函数调用更改为np.exp()
,并且我继续得到该错误。以为我有某种作用域与命名空间的问题或问题,我已经把这个相同的导入功能在不同的位置,包括在test.py
文件,类文件WC_class.py
的顶部,即使在方法:
class WC_unit:
def __init__(self): [assign default pars from a dict including r, dt, tau, and Iapp]...
def update(self):
from numpy import *
self.r += self.dt/self.tau * (-self.r + exp(self.Iapp))
我真的很想看看我的游戏,并弄清楚如何编写我自己的课程,并将它们与真棒计算工具一起使用。我想我想知道:
我做错了什么(可能很多,我怀疑)。我认为这是我如何导入我的课程?但也许也在班级本身范围内。
为什么我的班级在我
import
的时候失去了对numpy功能的访问权,但是当我在终端中像运行脚本那样运行时,我想我也一般不明白为什么人们如此保护自己的命名空间,也就是为什么有那么多的例子说明
import numpy as np
和使用所有的功能np.exp(x)
,等我没有太多的一个计算机科学背景,所以我可以从你可以提供的任何解释中受益良多 - 文档对我来说有点神秘。
Python版本:2.7.8 | Anaconda 2.1.0(x86_64)| (默认情况下,2014年8月21日,15:21:46) [GCC 4.2.1(苹果公司建立5577)] 在Mac OSX 10.6.8
停止做'从numpy的进口*'和'喜欢进口numpy'和使用'numpy.array','numpy.mean'等。这样可以防止名称空间污染,从而产生您所看到的问题。 – CoryKramer 2015-02-10 19:23:37
请始终显示任何错误消息*全回溯*在你的问题 – 2015-02-10 20:37:32