Импорт классов в модуле

1

В настоящее время у меня есть парсер с несколькими классами, которые работают вместе.

Для экземпляра: TreeParser создает несколько модулей Product и Reactant, которые, в свою очередь, создают несколько классов Element. TreeParser вызывается методом рендеринга в том же модуле, который вызывается из импортера.

Наконец, если пакет имеет зависимости (например, re и другой другой модуль в той же папке), где лучше всего требовать эти модули? Внутри файла __init__.py или внутри самого модуля?

EDIT:

При импорте части модуля, который вызывает другой def внутри модуля, как вы называете это def, если он не импортирован?

lib/toolset.py => def add(){ toolset.show("I'm Add"); } def show(text){print text};

если этот файл вызывается из main.py => import lib.toolset, тогда метод show не будет загружен, или main.py => from lib.toolset import show не будет работать.

Можно ли поставить import toolset в начало toolset.py?

Теги:
namespaces
module

2 ответа

3
Лучший ответ

Я думаю, что это ключевое выражение в вашем вопросе.

Я действительно не хочу добавлять имя модуля перед каждым вызовом класса

Мой ответ: Я слышал, что вы говорите, но это стандартная практика в Python.

Любой код чтения программиста на Python, такой как "result = match (blah)", предположит, что вы вызываете локальную функцию внутри своего собственного модуля. Если вы действительно говорите о функции match() в модуле re, они ожидают увидеть "result = re.match(blah)". Вот как это.

Если это помогает, мне не понравился этот стиль, когда я впервые пришел на Python, но теперь я ценю, что он устраняет любую двусмысленность над тем, какая из многих функций, называемых "match", которую я вызываю, особенно когда я прихожу назад, чтобы прочитать код, который я написал шесть месяцев назад.

2

Я не совсем уверен, в чем проблема, просто вы хотите напечатать меньше?

  • получить достойный редактор исходного кода с автозаполнением!
  • вы можете сделать import longmodulename as ln и использовать ln.something вместо longmodulename.something
  • вы можете сделать from longmodulename import ( something, otherthing ) и использовать something напрямую

import * никогда не бывает хорошей идеей, она беспорядочна с инструментами кодирования, ломается молча, заставляет читателей задаться вопросом, как было определено и так далее...

  • 0
    Как узнать, импортируется ли весь модуль? Есть ли какая-то собственная личность, которая ссылается на текущий модуль?
  • 0
    Не существует (разумного) способа узнать, как был импортирован модуль, и нет причины, по которой кому-либо это нужно было бы знать. Что ты пытаешься сделать?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню