Доступ к переменным из одного класса в другом классе - PullRequest
0 голосов
/ 04 августа 2020

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

Я использую 2 класса; один для запуска пространства диффузионной сетки, grid (), и другой, для перемещения частиц, atom (). Класс atom () не наследует переменные от класса grid (). Область координат, называемая t_space, создается в grid () с использованием initiate t_space, и я хочу получить доступ к этой переменной t_space, созданной в initiate t_space в atom ().

Мой код очень длинный, поэтому я включил то, что надеюсь - соответствующие биты, и моя текущая попытка решить эту проблему.

Код, который я надеялся вызвать переменную t_space из grid () в atom (), был:

atom().tspace = grid().t_space

class grid():
    
    def __init__(self, x, y):
        self.grid = np.zeros((x,y))
        self.list_of_atoms=[]
        self.x = x
        self.y = y
        
    def initiate_t_space(self,t_space_x, t_space_y): 

         self.t_space = []
         for i in range(0,self.t_space_x):
             for j in range(0,self.t_space_y):
                 self.t_space.append([i,j])

 class atom():

    def __init__(self,x,y):
        self.position=[x,y]
        self.position_tracker=[]
        self.dx=0
        self.dy=0
        # self.tspace = [[11, 42], [11, 43], [11, 44], [11, 45], [11, 46], [11, 47], [11, 48], [11, 49], [11, 50], [11, 51], [11, 52], [11, 53], [11, 54], [11, 55], [11, 56], [11, 57], [11, 58], [12, 38], [12, 39], [12, 40], [12, 41], [12, 42], [12, 43], [12, 44], [12, 45], [12, 46], [12, 47], [12, 48]]
        # self.t_space = []
        # for i in range(0,100):
        #     for j in range(0,200):
        #         self.t_space.append([i,j])
        # print(self.t_space)
        atom().tspace = grid().t_space

Закомментированный код в классе atom () - это предыдущая попытка инициировать t_space в atom (), однако его необходимо вычислить в grid (), поскольку он использует переменные из grid ().

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 04 августа 2020

Ваши переменные являются не атрибутами класса , а атрибутами экземпляра . grid() создает экземпляр вашего класса сетки, но вы нигде не назначаете t_space этого экземпляра (похоже, ваш единственный способ сделать это прямо сейчас - вызвать initiate_t_space(t_space_x, t_space_y) для этого созданного объекта).

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

В любом случае вам необходимо вызвать initiate_t_space(t_space_x, t_space_y), чтобы установить сетку t_space, чего вы не делаете. Другими словами, ваша программа никогда не запускает код внутри вашей функции insitiate_t_space.

Подробнее о классах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...