Python: как я могу инициализировать объект в одном модуле и использовать его в другом - PullRequest
0 голосов
/ 30 октября 2018

мои настройки: mod1.py:

class cars:
    def __init__(self,x,y,z):
        self.x = x

mod2.py:

import mod1
obj = mod1.cars(x,y,z)

mod3.py

from mod2 import obj

Теперь, когда я импортирую obj в mod3.py, метод init машин выполняется. что я хочу, так как obj уже инициализирован в mod2.py, mod3 должен получить уже инициализированный экземпляр, а не создавать новый. Как я могу сделать это в Python

1 Ответ

0 голосов
/ 30 октября 2018

Теперь, когда я импортирую obj в mod3.py, запускается метод init машин.

Конечно, это то, что вы сказали Python делать. При первом импорте модуля (в заданном процессе) выполняются все операторы на верхнем уровне. Вы создаете obj на верхнем уровне mod2, поэтому при первом импорте mod2, mod1 импортируется, затем вызывается mod1.cars(...), что вызывает mod1.cars.__init__().

что я хочу, так как obj уже инициализирован в mod2.py, mod3 должен получить уже инициализированный экземпляр

Именно так и происходит. Конечно, для текущего процесса - объекты не живут вне процесса (и не используются совместно процессами)

при каждом импорте я имею в виду каждый первый импорт из разных модулей

Пока все эти операции импорта выполняются в одном и том же процессе, mod2.obj будет создаваться только один раз для этого процесса . Конечно, если у вас разные процессы, каждый процесс будет иметь свой собственный экземпляр obj - как я уже говорил, объекты существуют только во время выполнения и не разделяются между процессами (надеюсь).

Случай только , в котором один и тот же модуль может быть импортирован дважды, это если ваш sys.path испорчен и позволяет разрешить одно и то же имя модуля для двух разных квалифицированных имен И у вас есть один импорт, используя одно полное имя, а другое - другое, но это довольно необычная ситуация.

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