пакет импортирует библиотеки без инициализации класса - PullRequest
1 голос
/ 03 мая 2020

Сомнение заключается в том, что если импортировать класс из пакета внутри другого пакета, как это:

from bar import foo

Инициализирует ли он класс? и если модуль имеет импорт в первой строке, например:

import tensorflow

class foo:
   def __init__(self):
    # some things

Импортирует ли он пакет, даже если мы не инициализируем класс из другого файла?

1 Ответ

2 голосов
/ 03 мая 2020

Инициализирует ли он класс?

Нет, он просто дает вашей программе доступ к этому классу - готов к созданию экземпляра объекта, когда вы захотите (тогда он вызовет __init__ метод).

Импортирует ли он пакет, даже если мы не инициализируем класс из другого файла?

Да. Вы можете видеть это так, как если бы вы просто набрали import bar, тогда вы сможете получить доступ к импортированному модулю тензорного потока с помощью bar.tensorflow, то есть он фактически импортируется, даже если в модуле нет ничего .

В вашем конкретном c случае простого импорта foo из bar мы все равно можем получить доступ к тензорному потоку через встроенный пакет inspect, который даст нам ссылку на bar и таким образом .tensorflow из foo.

import inspect
from bar import foo
print(inspect.getmodule(foo).itertools) #<module 'itertools' (built-in)>

Я не уверен, есть ли более простой способ "добраться" до bar из foo без использования inspect, но это то, что я нашел для полного объяснения вашего случая!

...