Импорт классов в модуле - PullRequest
1 голос
/ 23 апреля 2010

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

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

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

EDIT:

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

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?

Ответы [ 2 ]

3 голосов
/ 23 апреля 2010

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

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

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

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

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

2 голосов
/ 23 апреля 2010

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

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

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

...