我想學習如何做科學計算面向對象的編碼運行模擬訪問功能;我正在使用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