0

Насколько я понял, в python есть 3 метода импорта

1.from 'имя_модуля' import 'имя_класса'

2.import 'имя_модуля'

3.from 'имя_модуля' import *

Если использовать 2 способ, то обращаться к классам придётся:

'имя_модуля'.'имя_класса'

Во всех остальных способах обращение без точки, так словно этот класс уже в нашем модуле. Но почему-то не рекомендуют использовать 3 способ, объясняя это тем, что возникает возможность конфликта имен между имен класса импортируемого модуля и модуля, в котором мы находимся.

  1. Почему же такого не происходит, когда мы импортируем 2-ым способом. Ведь там и там происходит импорт всего файла и создания тех же переменных в нашем пространстве имен(namespace) или нет?

  2. Что и в каком случае лучше использовать?

helsereet
  • 191
  • похожий вопрос: https://ru.stackoverflow.com/q/487660/23044 – jfs Dec 04 '17 at 09:47
  • а еще есть importlib – eri Dec 04 '17 at 10:12
  • В первых двух случаях вы точно знаете, что в вашем пространстве имён появятся только имя_модуля или имя_класса, а вот в третьем случае хрен знает что появится, пока не заглянуть в содержимое импортируемого модуля (а постоянно заглядывать туда не очень удобно, знаете ли) – andreymal Dec 04 '17 at 10:17
  • старайтесь одной проблемой на вопрос ограничиваться (более специфичный вопрос повышает сигнал/шум соотношение -- более полезен для будущих посетителей из гугла). К примеру, «почему from модуль import * не следует кроме особых случаев использовать» можно отдельно спросить. – jfs Dec 04 '17 at 11:52
  • from модуль import * обычно используют, когда в модуле такая туча классов и констант, что код начинает слишком "раздуваться". Типичные случаи - tkinter, tkinter.ttk, ctypes при этом, естетсвенно, бывают конфликты имен... которые я, например, уже ловил, и понять, в чем дело, бывает достаточно трудно.... – Alex Titov Dec 04 '17 at 12:59

0 Answers0