Несколько классов объединены в один Main - PullRequest
0 голосов
/ 25 мая 2018

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

У меня три файла в одном месте: main.py , program1.py и program2.py .Эти программы также содержат функции.

Я хочу использовать эти файлы .py в основном следующим образом:

import program1, program2
import skimage.io
import numpy as np

image_path = "abc"
image = skimage.img_as_float(skimage.io.imread(image_path)).astype(np.float32)

# program 1 will load the image and detect objects in it, returning a pandas dataframe
detected = program1(image)

# For each object in dataframe, crop image and run recognizer
for index, row in df.iterrows():

    object = image[ymin:ymax, xmin:xmax] #crop object from main image
    object_det = program2(object) #pass cropped object to recognizer
    print(object_det) # program2 will return a string

Мой вопрос: Должен ли я создавать классы для Program1 и Program2?или я должен создать их как функции, а затем импортировать их?Они имеют несколько зависимостей от внешних библиотек.

Может кто-нибудь сказать мне, как наиболее эффективный и Pythonic способ решить эту проблему?

1 Ответ

0 голосов
/ 25 мая 2018

Когда вы делаете import program1, program2 в main.py, вы получаете program1 и program2 переменные в вашем пространстве имен.Это объекты модуля, атрибутами которых будут глобальные переменные, определенные в других ваших файлах (включая функции, определенные на верхнем уровне).Вы не можете напрямую вызывать объект модуля, что и делает ваш текущий код.

Вместо:

detected = program1(image)

Вы должны сделать что-то вроде:

detected = program1.some_function(image)

Где some_function - это имя любой функции, которую вы определили в файле program1.Точно так же:

    object_det = program2(object) #pass cropped object to recognizer

Вероятно, должно быть:

    object_det = program2.some_other_function(object) #pass cropped object to recognizer

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...