实例化全局对象

时间:2017-04-04 11:30:27

标签: python python-2.7

我有一些类似于以下的Python代码:

def a():
    x.b()

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

此处,x是一个对象,因此在c()中,我想创建x,然后运行函数a()。我希望x是全局的,而不是必须将其作为参数传递给a()。但是,如果我尝试运行上面的代码,它会告诉我x中的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 个答案:

答案 0 :(得分:0)

这对我有用。在启动函数中使变量成为全局变量。

此代码的问题是必须在a之前调用b。

{{1}}

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

如果您在x方法中创建create_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