【发布时间】:2022-12-01 11:18:44
【问题描述】:
假设我有一个函数不是由 def 创建的,而是由 partial() 调用创建的(或者甚至只是通过赋值)。在下面的示例中,如何将 bar 作为点击子命令添加到 cli 组?我不能使用装饰器方法(与 foo 一样)。我失败的方法如下所示。
import functools
import click
@click.group()
def cli():
pass
@cli.command()
def foo(myname="foo"):
print(f"I am {myname}")
bar = functools.partial(foo, myname="bar")
# this has no effect
# cli.command(bar)
# results in: AttributeError: 'functools.partial' object has no attribute 'name'
# cli.add_command(bar)
# results in: AttributeError: 'functools.partial' object has no attribute 'hidden'
# cli.add_command(bar, name="bar")
if __name__ == "__main__":
cli()
更新:实际上,看起来 partial 是这里的罪魁祸首。 This answer 在一个不同但相关的线程中,指出部分对象“缺少某些属性,特别是 __module__ 和 __name__”。
【问题讨论】:
标签: python python-click