2016-04-12 16 views
1

私はPythonの初心者です。関数のプロットを取得しようとしています。 これは私のコードです:NameError:名前 'first'が定義されていません

class Optic(): 
    def __init__(self): 
     ''' 
     param define 
     ''' 
     global time,lamda, light_speed, Fc, D, z, beta, T0 
     self.__time = np.linspace(-400,400, 1600) #Picosec 
     self.__lamda = 1550000 #Picometer 
     self.__light_speed = 0.3 #meter/Picosec 
     self.__Fc=light_speed/lamda #Hz 
     self.__D = 17*np.power(10,-6) #sec/meter 
     self.__z=[0,10000,20000,30000] #meter 
     self.__beta = (-(np.power(lamda,2)/(2*np.pi*light_speed))*D) #sec/meter 
     self.__T0 = 200 
#  time = np.linspace(-400*np.power(10,-12), 0.5*np.power(10,-12), 400*np.power(10,-12)) #sec 
#  lamda = 1550*np.power(10,-9) #meter 
#  light_speed = 3*np.power(10,8) #sec/meter 
#  Fc=light_speed/lamda #Hz 
#  D = 17*np.power(10,-6) #sec/meter 
#  z=[0,10000,20000,30000] #meter 
#  beta = (-(np.power(lamda,2)/(2*np.pi*light_speed))*D) #sec/meter 
#  T0 = 20*np.power(10,-12) 

    def firstPulse(self): 
     global first 
     first = np.exp(-0.5*np.power(time/T0,2)) 

def main(): 
    plt.plot(first, time) 
    plt.show() 


if (__name__ == "__main__"): 
    main() 

が、私は得る:

NameError: name 'first' is not defined 

ところで、私はスパイダーを使用しています。

+1

ここで 'plt'を定義していますか? 'main()'を呼び出す前に 'firstPulse()'を呼び出しましたか? – zondo

答えて

2

あなたはinit opticを持っていて、その変数を定義しているdef firstPulse(self)を呼び出します。このような

何か:

def main(): 
    opt = Optic(): 
    opt.firstPulse() 
    plt.plot(first, time) 
    plt.show() 
0

あなたが最初に定義していない

plt.plot(first, time) 

を呼び出します。

first = 0 

コードのどこかに置くことができます。 time(および適切なインポートがない限りplt)の問題が発生することがあります。

firstOpticに渡すのが適切な場合があります。実際には、すべてのglobal変数をinit関数に送ることができます。

def __init__(self): 

def __init__(self, first): 

になる可能性があり、あなたはinitメソッドでそれを設定した場合、あなたは後でself.firstを参照することができます。

一般的に、グローバルは避けることをお勧めします。

関連する問題