2013-09-26 4 views
0

Я рефакторинг части программного обеспечения Python 2. Код в настоящее время находится в одном файле, который содержит 45 или около того классов (и 2 строки за пределами класса для загрузки приложения).Python - лучший способ импорта модулей в сложное приложение?

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

Я обычно хотел написать мой импорт Python как таковой:

from zoo.dog_classes.beagle_class import BeagleClass 
from zoo.dog_classes.dalmatian_class import DalmatianClass 

так, чтобы было понятно, какие модули импортируются в классе, и что их имя как можно короче.

Для этого программного обеспечения логика довольно сложна, хотя классы, относящиеся друг к другу обычно в методах класса, приводят к многочисленным циклическим импортам, что исключает этот подход.

Я не хочу импортировать модули в функции, так как это ужасно для удобочитаемости, и код везде повторяется.

Похоже, мой единственный вариант, чтобы писать импорт таким образом:

import zoo.dog_classes.beagle_class

, а позже, когда мне нужен класс:

b = zoo.dog_classes.beagle_class.BeagleClass()

Это, однако, чрезвычайно подробный и болезненный, чтобы писать.

Как я должен иметь дело с моим импортом?

+0

Возможно, вам стоит подумать о том, чтобы избавиться от подхода «один класс на модуль». Во-первых, это неявно заставляет вас создавать более крупные классы вместо разделения функций (и при необходимости чистых функций). Во-вторых, вы не используете дополнительный модуль абстракции (что, вероятно, существенно снизит общий объем импорта). – fjarri

+0

Классы действительно большие. Я знаю, что это далеко не идеальный вариант, но я хотел бы реорганизовать программное обеспечение с помощью нескольких шагов - первым из которых было бы разбиение его на отдельные файлы. – bitgarden

ответ

1
import zoo.dog_classes.beagle_class as beagle 

b = beagle.BeagleClass() 
+0

В настоящее время код находится в одном файле, и поэтому есть много вызовов BeagleClass и друзей без добавления имени модуля. Я хотел бы сохранить его таким образом, если это возможно; то есть иметь возможность свободно писать BeagleClass() в любом месте базы кода. – bitgarden

+0

Хм, но ты собираешься разбить код ...? Это примерно так же просто, как вы можете получить, не прибегая к синтаксису 'from', но, как вы сказали, это вызовет проблемы. –

+0

Право - это довольно сложный фрагмент кода (по существу графический менеджер рабочего стола + инструментарий UI), и все классы называются достаточно отчетливо и представляют собой достаточно четкие концепции для того, чтобы их имя было самоописательным, но они в значительной степени взаимозависимы: ( – bitgarden

Смежные вопросы