我编写了需要包装在一个程序中的单个程序,而不是一个长代码文件。有一个探测器和一个识别器,主程序负责拍摄图像,通过探测器,然后在传递给识别器之前进行一些图像处理。
我在同一位置有三个文件: main.py , program1.py 和 program2.py 。这些程序还包含功能。
我想在main中使用这些.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创建类吗?或者我应该将它们创建为函数,然后导入它们?它们对外部库有多种依赖关系。
有人能告诉我解决这个问题最有效和最恐怖的方法是什么?
答案 0 :(得分:1)
当您在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
是否应该使用类实际上是使得导入工作的单独设计决策。如果一个简单的函数调用是两个模块中每个模块对你发送的数据所做的适当的接口,那么就不需要为了样式而添加复杂的OOP结构。好的。但是如果你有比你在例子中展示的更复杂的东西,那么编写一个或多个类可能是有意义的。但是,如果没有更多信息,我们就无法提供更详细的建议。