有没有更好的方法来使用来自不同 .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 导入的解决方案中使用抽象接口。
我正在制作一个代理,它使用不同的函数集来解决不同类型的问题。我的问题是——有很多不同类型的问题需要解决,所以我有很多很多不同的功能需要代理使用。我的主 .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 导入的解决方案中使用抽象接口。