从另一个文件中访问变量

时间:2012-01-10 17:33:14

标签: python

我有两个文件设置:

  

文件1

global test
test = 1
import FooBar

FooBar()
  

文件2(FoorBar.py):

class FooBar:
    def Foo:
       print test

基本上,我想将变量test从文件1传递到文件2.使用上面的代码我得到了异常:

  

NameError:未定义全局名称(Python)

4 个答案:

答案 0 :(得分: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 

不同之处在于,在第一种情况下,“test”变量将是静态的,即对于FooBar的所有实例都是相同的,在第二种情况下,它对于实例是本地的(对于所有实例都是不同的)。

答案 1 :(得分:3)

它不起作用。您可以将一个模块中的名称合并到另一个模块的名称空间中,例如from mymodule import *。但是您希望将模块中的名称导出到其他模块中。虽然你可以用hacky的方式做到这一点,但并不是你想要编程的方式。

相反,只需将值作为参数传递给FooBar构造函数。

答案 2 :(得分:0)

你在这里遇到了很多问题:

  1. Foo看起来像是一种方法,但需要()
  2. 如果文件1是要创建一个FooBar,那么你是不是需要将它保存到一个变量(所以你可以用它做点什么)或者在FooBar中创建一个 init 方法在创建FooBar时做点什么?
  3. 文件1不需要声明测试全局,但文件2中的方法确实

答案 3 :(得分:-2)

您需要在两个文件中都使用全局测试语句才能使用相同的全局。