2016-12-06 3 views
-1

Есть ли умный способ инициализации объектов как глобальных? Поэтому, когда я создаю объект как:Инициировать объект как глобальный

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

это, очевидно, не работает, но мне интересно, если есть хороший способ справиться с этим, как g в колбе.

+2

Объекты не являются глобальными, локальными или другими; все они существуют в куче. * Имена * имеют область действия. – chepner

+0

, но вы могли бы создать объект, который, когда init, делает его глобальным – Rob

+0

Нет, потому что * объект * не является глобальным; любое имя, которое вы * присваиваете * объекту, имеет область видимости, но эта информация недоступна для метода '__init__'. – chepner

ответ

1

Возможно, что это не работает с self, потому что self является параметром в вашем конструкторе.

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

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


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

Это может использоваться только в действительно действительно крайних случаях, я не вижу случаев, когда это имело бы смысл.

Примечание. Это работает только в том случае, если экземпляр создан. Если вы не хотите экземпляр, но класс raw, вы можете пометить имя класса как глобальное:

global A 
class A(object): 
    pass 
+0

Это создает глобальное имя * one *, которое ссылается на экземпляр 'A'. Каждый раз, когда вы вызываете '__init__', экземпляр' instance' относится к изменениям. – chepner

+0

@chepner Конечно, вот почему я сказал: «Я не вижу случая, когда это имеет смысл». – user312016

+0

Конечно же, это может быть достигнуто с помощью 'instance = A()' ... –

Смежные вопросы