我正在开发一个由 2 种不同机制调用的应用程序:
main.py
文件(独立 Python 应用程序):python main.py --args ...
我想要一个“模块化”代码,意思是通过这种方式来改变某些行为。
即我的主类有一个方法 generate_output()
,它在标准输出中打印一个字符串(假示例)。
class ipdisco:
def __init__(self):
self.test = 'a string'
def generate_output(self):
print(self.test)
如何添加一些其他不同的输出,例如,csv 格式的输出、json 格式的输出、png 格式的输出等... 我的应用程序是这样设计的
main.py
ipdisco/
__init__.py
ipdisco.py
我想通过“加载插件”添加其他输出方法。但我不知道该怎么做。
现在,我的 main.py
脚本中有多个函数,它们接受类作为参数并解析它。
main.py
:
import ipdisco
def generate_pprint(var):
print(f"Here is a beautiful string : {var}")
def main(argv):
ipdisco_obj = ipdisco.ipdisco()
generate_pprint(ipdisco_obj.test)
# Here is a beautiful string : a string
ipdisco_obj.generate_output()
# a string
但我很确定这不是在库中更改/添加其他行为的最佳实践。
我之前看到过一些库使用其他更漂亮的方法,比如使用类继承、__import__
或其他东西。
也许是这样的(只是一个例子):
class ipdisco:
def __init__(self):
self.test = 'a string'
def generate_output(self, function=base_output):
function(self.test)
def base_output(self, arg):
print(arg)
in main.py:
import ipdisco
def custom_pprint(var):
print(f"Here is a beautiful string : {var}")
def custom2_pprint(var):
print(f"Here is another beautiful string : {var}")
def main(argv):
ipdisco_obj = ipdisco.ipdisco()
ipdisco_obj.generate_output()
# a string
ipdisco_obj.generate_output(function = custom_pprint)
# Here is a beautiful string : a string
ipdisco_obj.generate_output(function = custom2_pprint)
# Here is another beautiful string : a string