如何手动设置python可调用函数的签名

2024-04-26 13:20:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用Jedi为我的pybind11模块提供一个代码完成。绝地评估__signature__可调用函数的完成情况。有关详细信息,请参见:Jedi struggles with pybind11 modules。但是pybind11目前无法生成它们:Set the text_signature attribute of callables

在pybind11模块加载之后,有没有办法使用python解释器手动设置可调用函数(尤其是函数)的__signature__?像这样:

pyModule.myFunc.__signature__ = *Do some magic here*

是否有一些工具可以生成python可调用函数的签名?有很多包可以在运行时动态创建函数,而cich也可以创建签名。但这不是我的用例。你知道吗


Tags: 模块the函数代码textmoduleswith情况
1条回答
网友
1楼 · 发布于 2024-04-26 13:20:49

我没有用绝地来测试这一点,因为看起来要进行可靠的设置和复制需要大量的工作,但也许下面的工作已经可以了。你知道吗

检查可调用签名的规范方法是恰当命名的^{}函数。它依赖于magic__annotations__属性,该属性可以在运行时修改:

>>> from inspect import signature
>>> def foo(bar):
...     return True
... 
>>> signature(foo)
<Signature (bar)>  # empty signature
>>> import typing
>>> foo.__annotations__ = {'bar': typing.Union[bool, None], 'return': bool}
>>> signature(foo)
<Signature (bar: Union[bool, NoneType]) -> bool>   # now contains the info we added

由于__signature__不是一个标准字段,它可能是由绝地生成的,他们在the ticket you linked中的问题描述也暗示他们更愿意直接利用inspect.signature。你知道吗

相关问题 更多 >