Python 中 CLI 和库的模块化代码

时间:2021-03-24 10:43:28

标签: python python-3.x

我正在开发一个由 2 种不同机制调用的应用程序:

  1. 在 CLI 中,通过 main.py 文件(独立 Python 应用程序):python main.py --args ...
  2. 来自其他 Python 应用程序(作为库?)

我想要一个“模块化”代码,意思是通过这种方式来改变某些行为。 即我的主类有一个方法 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

0 个答案:

没有答案