2014-09-19 4 views
0

Я хотел бы написать модель, в которой разные классы, хранящиеся в разных файлах, обмениваются информацией.Python: Взаимодействующие атрибуты объекта

К примеру, у меня есть главный-файл, который будет в конечном итоге выполнить модель

--main.py 

from solution import Solver 

solver = Solver() 

solver.create() 

Там также два больше файлов/классов, которые должны впоследствии обмениваться информацией:

--solution.py 
from grid import Remap 
remap = Remap() 

class Solver: 
    def __init__(self): 
     self.solve = 4 

    def create(self): 
     remap.method1() 

     self.solve += remap.x+remap.y 
     print self.solve 

--grid.py 
class Remap: 
    def __init__(self): 
     self.x = 0 
     self.y = 0 

    def method1(self): 
     self.x += 1 
     self.y += 2 

Это работает до сих пор и, кажется, довольно легко.

Теперь я хотел бы добавить еще один метод к grid.py/Remap, который использует текущий атрибут решить из другого класса Solver. Например:

--grid.py 
class Remap: 
    def __init__(self): 
     self.x = 0 
     self.y = 0 

    def method1(self): 
     self.x += 1 
     self.y += 2 

    def method2(self): 
     self.x = ?????.solve 

Но как я могу получить обновленный атрибут из одного класса в другой, которые в зависимости друг от друга, и избежать циклических зависимостей. Должен ли я использовать внешние глобальные классы (они действительно существуют в Python?)?

+2

Не могли бы вы объяснить немного больше о том, что этот код должен делать? Не могли бы вы сделать объект 'Solver' аргументом * * для' Remap.method2() '? – jonrsharpe

+0

Я действительно хочу создать объект, который можно применить к разному классу. В C++ существует возможность объявить экземпляр extern в заголовочном файле, «extern Solver * solver;». Наверное, это то, что я хочу сделать в Python ?! – Jan87

+0

Это не очень объясняет - не могли бы вы предоставить менее абстрактные примеры использования? – jonrsharpe

ответ

0

Поскольку Solver обращается remap он должен просто передать себя в remap:

class Solver: 
    def __init__(self): 
     self.solve = 4 
     self.remap.solver = self 

, а затем remap можно использовать:

class Remap: 
    def method2(self): 
     self.x = self.solver.solve