Теперь, когда я импортирую obj в mod3.py, запускается метод init машин.
Конечно, это то, что вы сказали Python делать. При первом импорте модуля (в заданном процессе) выполняются все операторы на верхнем уровне. Вы создаете obj
на верхнем уровне mod2, поэтому при первом импорте mod2
, mod1
импортируется, затем вызывается mod1.cars(...)
, что вызывает mod1.cars.__init__()
.
что я хочу, так как obj уже инициализирован в mod2.py, mod3 должен получить уже инициализированный экземпляр
Именно так и происходит. Конечно, для текущего процесса - объекты не живут вне процесса (и не используются совместно процессами)
при каждом импорте я имею в виду каждый первый импорт из разных модулей
Пока все эти операции импорта выполняются в одном и том же процессе, mod2.obj
будет создаваться только один раз для этого процесса . Конечно, если у вас разные процессы, каждый процесс будет иметь свой собственный экземпляр obj
- как я уже говорил, объекты существуют только во время выполнения и не разделяются между процессами (надеюсь).
Случай только , в котором один и тот же модуль может быть импортирован дважды, это если ваш sys.path
испорчен и позволяет разрешить одно и то же имя модуля для двух разных квалифицированных имен И у вас есть один импорт, используя одно полное имя, а другое - другое, но это довольно необычная ситуация.