2012-01-10 55 views
-1

訪問一個變量從一個文件I具有兩文件設置:在另一個

File 1:

global test 
test = 1 
import FooBar 

FooBar() 

File 2 (FoorBar.py):

class FooBar: 
    def Foo: 
     print test 

從本質上講,我想從文件1傳遞變量test到文件2 。有了上面的代碼,我得到了一個例外:

NameError: global name not defined (Python)

+6

閱讀python教程 – Marcin 2012-01-10 17:37:37

+1

你是否考慮過,實際上*傳遞變量? – kindall 2012-01-10 17:39:18

回答

4

你可以嘗試不同的方法:

文件1

from FooBar import FooBar 
FooBar.test = 1 

foo_bar = FooBar() 
foo_bar.Foo() 

文件2

class FooBar: 
    test = None 

    def Foo(self): 
     print self.test 

文件1

from FooBar import FooBar 
foo_bar = FooBar(1) 
foo_bar.Foo() 

文件2

class FooBar: 
    def __init__(self, test): 
     self.test = test 

    def Foo(self): 
     print self.test 

不同的是,在第一種情況下的 「測試」 變量將是靜態的,即,相同的對於FooBar的所有實例,在第二種情況下,它將在一個實例中是本地的(對於所有實例而言都是不同的)。

+0

謝謝,這非常有幫助。我想第二種方法存在的一個問題是,必須在'FooBar'內寫'self.test'而不是簡單的'test'。 – Randomblue 2012-01-11 09:46:16

3

它不起作用 那樣。您可以將一個模塊中的名稱合併到另一個模塊的名稱空間中,例如from mymodule import *。但是您想要將模塊中的名稱導出到不同的模塊中。雖然你可以用黑客的方式做到這一點,但實際上並不是你想要編程的。

相反,只需將該值作爲參數傳遞給構造函數FooBar即可。

0

你已經有了一系列的問題在這裏:

  1. 美孚看起來是一個方法,但需要()
  2. 如果文件1是爲了創建一個FooBar的,那麼你會不會或者需要將它保存到一個變量(所以你可以做些什麼),或者在FooBar中創建一個init方法來創建FooBar時執行某些操作?
  3. 文件1並不需要聲明的測試全球,但在文件2的方法,肯定不會
-2

您需要一個全球測試聲明在這兩個文件中爲他們使用相同的全局。