2017-04-04 211 views
0

我有类似下面的一些Python代码:实例化一个全局对象

def a(): 
    x.b() 

def c(): 
    x = create_x() 
    a() 

这里,x是一个对象,所以在c(),我想创建x,然后运行功能a()。我想x是全球性的,而不是必须将它作为参数传递给a()。但是,如果我尝试运行上面的代码,它会告诉我,在a()不引用任何内容。

那么标准的解决方案是什么?一种想法是全局定义x并将其设置为0:

x = 0 

def a(): 
    global x 
    x.b() 

def c(): 
    global x 
    x = create_x() 
    a() 

但这似乎有些奇怪,因为它暗示x是一个整数,而实际上它是一个对象。

在C++中,我通常会通过创建一个指向x的指针,将其设置为0,然后将指针设置为由新对象x创建的内存来解决此问题。但是,Python中最好的解决方案是什么?

+2

使用'None',而不是'0'? – Pit

+1

最初不要设置'x' ...?它将通过运行'c'来创建。你不必在函数之外声明它,'global'已经做到了。 – deceze

+0

看看是否有帮助:http://stackoverflow.com/questions/16511321/python-global-object-variable – planet260

回答

0

这对我有效。在函数中启动变量全局变量。

此代码的问题是,必须先调用b。

def a(): 
    print(x) 

def b(): 
    global x 
    x = 1 
    a() 

b() 
0

我不知道是否回答这个问题,但它看起来像你需要调用global x只有内部c()功能。

class XClass: 
    def b(self): 
     print 'hello world' 

def create_x(): 
    return XClass() 

def a(): 
    x.b() 

def c(): 
    global x 
    x = create_x() 
    a() 

c() # hello world 
a() # hello world 

也许它,如果你创建create_x()方法里面x变量减少混乱:

class XClass: 
    def b(self): 
     print 'hello world' 

def create_x(): 
    global x 
    x = XClass() 

def a(): 
    x.b() 

def c(): 
    create_x() 
    a() 

c() # hello world 
a() # hello world 
x.b() # hello world