有没有更好的方法来使用来自不同 .py 文件的函数?

Is there a better way to use a function from a different .py file?

我正在制作一个代理,它使用不同的函数集来解决不同类型的问题。我的问题是——有很多不同类型的问题需要解决,所以我有很多很多不同的功能需要代理使用。我的主 .py 文件可能会以至少 1000 行结束,我想避免这种情况。

为了解决这个问题,我不想在主 .py 文件中定义所有函数,而是想在我的当前目录中添加一个文件夹,并且在该文件夹中,每种类型都有不同的 .py 文件问题(每组函数)。然后我希望我的主 .py 文件中的代理 class 可以访问这些功能。

我想出了一个办法,但我不知道这是否是最好的方法。这是我所做的:

在主 .py 文件中:

#testing process to import methods from other py file
from methods import general as gen

class Agent:
    def __init__(self):
        Agent.method_one = gen.method_one(self)

    def solve(self):
        self.method_one()

agent = Agent()
agent.solve

在methods/general.py

def method_one(self):
    print('you did it bro')

有更好的方法吗?任何 thoughts/help 将不胜感激。

我认为您可以为每个函数创建文件并将这些文件导入到您的 main.py 文件中。 将这些文件导入 main.py 文件后,其他文件中的函数就可以访问了。

例如: 对于 a.py:

def main():
    print("Hi")

对于main.py:

import a
a.main()  # prints "Hi". 

您是否考虑过以编程方式导入您的方法import_module

例如

gen = import_module("methods.general")
gen.method_one()

您没有具体说明您将如何决定选择求解器或方法,但如果您知道按名称调用哪一个,那么您可以像这样导入它们,然后使用 getattr/setattr.

solver = import_module(f"methods.{solver_name}")
method = solver.getattr(method_name)
setattr(self, method_name, method)

我建议在您要由 import_module 导入的解决方案中使用抽象接口。