2016-12-06 74 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()'也可以達到同樣的效果...... –