2016-12-06 78 views
-1

是否有一种聪明的方式来将对象初始化为全局对象?所以,当我创建一个对象,如:将对象初始化为全局对象

class A(object): 
    def __init__(self): 
     global self 
     super(A, self).__init__() 

这显然是行不通的,但我很好奇,如果有来处理这就像在烧瓶g一个不错的方式。

+2

对象不是全局的,本地的或任何东西;它们都存在于堆中。 *名称*有范围。 – chepner

+0

但是你能否创建一个对象,当init时,它使自己成为全局的 – Rob

+0

不,因为* object *不是全局的;无论你使用什么名字*赋值*该对象具有一个作用域,但该信息对'__init__'方法不可用。 – chepner

回答

1

这是可能的,那不适用于self,因为self是您的构造函数中的一个参数。

class A(object): 
    def __init__(self): 
     global instance 

     instance = self 
     super(A, self).__init__() 


A() 
instance 
<__main__.A at ...> 

这可能仅在使用真的很边缘的情况下,我没有看到任何情况下,这将使感。

注意这只在创建实例时才起作用。如果您不想使用实例,但使用原始类,则可以将类名标记为全局:

global A 
class A(object): 
    pass 
+0

这会创建引用“A”实例的* one *全局名称。每次调用'__init__'时,'instance'引用的实例都会改变。 – chepner

+0

@chepner当然,这就是为什么我说“我没有看到任何有意义的情况。” – user312016

+0

当然,使用'instance = A()'也可以达到同样的效果...... –