提供click的dropin替换,扩展它以在各种OOP上下文中工作

objclick的Python项目详细描述


点滴

pypipython versionsdocumentationpipeline status

objclick提供了 click,将其扩展到 各种OOP上下文。在

click是一个非常好的包,可以快速轻松地定义可组合性 通过在 实现命令“主”功能的函数的顶部。在

然而,从设计上讲,它在OOP上下文中并不能很好地发挥作用。特别地, 将类的实例方法提升为click并不容易 命令。这个包试图通过在 click在某些情况下,它也能很好地处理类。在

举一个激励人心的例子,假设您有一个实现 命令行:

>>>importobjclickasclick>>>importabc>>>classBaseService(metaclass=abc.ABCMeta):...defexplain(self):..."""Explain this service; must be implemented by subclasses."""......@click.command()...defmain(self):...print('Hello, let me tell you about myself.')...self.explain()...

这个类现在必须用explain的实现作为子类,但是 子类不需要重新实现CLI的其余部分:

^{pr2}$

由于MyService.main是一个实例方法,我们不能简单地调用 MyService.main()运行CLI的“main”功能。就像一个 一个类的普通实例方法,我们必须先实例化该类,然后 对实例调用方法:

>>>service=MyService()>>>service.main([],standalone_mode=False)Hello,letmetellyouaboutmyself.IamaninstanceofMyService.

(注: standalone_mode 是对测试有用的clickmain函数的标准参数 命令。)

这个包的初始版本仍然是实验性的,但是 实现了许多其他有用的案例。在

其中一个例子是classgroup装饰器给出的。这允许定义 类方法上绑定到类的类方法上的命令组 而不是类的实例。在一般情况下 如果 classgroup返回它定义的类的instance,这个实例 将作为self参数传递给添加的任何实例方法 作为小组的下属。在

例如,这里的命令组使用--config选项,作为 实例化Service类需要配置。所有子命令 的Service.main可以访问配置:

>>>importobjclickasclick>>>importjson,pprint>>>classService:...def__init__(self,config):..."""Instantiate `Service` with a configuration dict."""......self.config=config......@click.classgroup()...@click.option('--config',type=click.File())...defmain(cls,config=None):...ifconfigisnotNone:...withconfigasf:...config=json.load(f)...else:...config={}......print(f'Starting up {cls.__name__}...')...returncls(config)......@main.command()...defshow_config(self):...print('Config:',end=' ')...pprint.pprint(self.config)...

现在,Service定义的CLI可以如下方式调用:

>>>importtempfile>>>config={'option1':'a','option2':'b'}>>>withtempfile.NamedTemporaryFile(mode='w')asf:...json.dump(config,f)...f.flush()...# like `service.py --config <config-file> show-config`...args=['--config',f.name,'show-config']...Service.main(args,standalone_mode=False)...StartingupService...Config:{'option1':'a','option2':'b'}

对象单击更改日志

v0.1.1(2020-10-02)

错误修复

  • 修复了调用classcommandclassgroup通过子类中的super()。在

版本0.1.0(2020-10-01)

  • 初始版本。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java需要64位jdk 1.5 for windows   eclipse运算符+对于参数类型java是未定义的。双,爪哇。双人   未下载文件扩展名为的java文件   java不支持带有POST的媒体类型   从动态创建的多个EditText读取文本时发生java错误   java无法为同一xpath单击多个按钮   如何在Java中动态格式化字符串   java Android Clear Middle活动   多线程Java内存模型volatile和x86   git在Java中通过Jgit忽略文件或文件夹   java“决策无法区分输入的备选方案1、2…”   子类的javajpa继承   java需要弄清楚如何操作mutator来弄清楚一个类,教授说,我对如何操作感到困惑   java如何使用JDBC将数据从文件复制到PostgreSQL?