2015-09-10 3 views
0

Я хотел бы определить глобальную переменную класса A в Pyhton. Эта переменная порождается другим классом В, в другом модуле, который конкретизируется в классе А. Проблемы:Как определить глобальную переменную в Python из внешнего класса?

  1. Python не позволяет мне импорта класса B в класс A «не может импортировать имя класса А "
  2. Python позволяет мне импортировать в классе B весь модуль, где находится класс A, но когда я пытаюсь выполнить , чтобы установить глобальную переменную из класса BI, получите ошибку« global name »класса A« не определено ».

в коде это мой класс A:

from moduleB import ClassB 

class ClassA: 
     global_var = None 

     def __init__(self, x, y): 
      self.x = x 
      self.y = y 
      self.classB = None 
      self.inst_classB() 

     def inst_classB(self): 
      self.classB = ClassB(x,y) 

и это мой класс B:

class ClassB: 

     def __init__(self,x,y): 
      self.x = x 
      self.y = y 

     def define_var_for_class_A(self): 
      # I assign the value here and it is here where the procedure fails 
      ClassA.global_var = 20 

Как я могу решить эту проблему?

+0

линия 'CLASSA:' и 'ClassB' является недействительным синтаксисом. Так что 'def__init __ (...)' (отсутствует пробел после 'def'). Кроме того, 'значение' не определено в функции' define_var_for_class_A'. Пожалуйста, укажите фактический код, а не только псевдокод. –

+0

Вам не следует ожидать, что циклический импорт будет работать. У вас не может быть импорт B и B import A. Они могут работать, но они плохие. Что вы действительно пытаетесь достичь? –

+0

Я пытаюсь определить глобальную переменную одного класса из другого класса, который создается экземпляром класса с глобальной переменной. Я не могу вставить весь код здесь, так как он длиннее этого. Это упрощенный код. Я хотел бы определить глобальную переменную без импорта другого класса. – user3523583

ответ

0

Чтобы ответить на ваш конкретный вопрос «Как определить глобальную переменную в Python из внешнего класса?», Вы просто импортируете внешний класс и задаете переменную в классе.

Например, рассмотрим moduleA.py, который содержит следующее:

class ClassA(): 
    global_var = None 

    def dump(self): 
     print "global var is", self.global_var 

Вы можете импортировать этот класс и изменить значение:

from moduleA import ClassA 

a = ClassA() 
a.dump() # => "global var is None" 

ClassA.global_var = 42 
a.dump() # => "global var is 42" 

Если вы действительно имели в виду глобальный (ну, модуль), импортируйте сам модуль. Например, изменить ModuleA выглядеть следующим образом:

global_var = None 
class ClassA(): 
    def dump(self): 
     print "global var is", global_var 

Вы можете изменить значение, как это:

import moduleA 
a = moduleA.ClassA() 
a.dump() # => "global var is None" 

moduleA.global_var = 42 
a.dump() # => "global var is 42" 
+0

Это сработает, но у меня есть два класса A и B. Конкретный экземпляр B, B делает вещи и устанавливает глобальное целое число в класс A. Теперь, поскольку циклические импортные значения не разрешены (и это объясняет, почему импорт не работает), есть способ установить переменную для класса (A) из другой класс (B) без необходимости импортировать его (импортировать A в B)? – user3523583

+0

@ пользователь3523583: нет. Чтобы что-то изменить, вы должны иметь ссылку на него. Чтобы иметь ссылку, вы должны либо импортировать ее, либо импортировать ее, и передать ссылку на вас. Итог, вы должны иметь ссылку на что-то, чтобы изменить его. –