假设我有一个函数不是由
def
但是
partial()
呼叫(甚至只是通过分配)。在下面的示例中,我如何添加
bar
作为
cli
组我不能使用decorator方法(如
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__
”。