首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何手动为python可调用对象设置签名

如何手动为python可调用对象设置签名
EN

Stack Overflow用户
提问于 2019-08-26 15:29:34
回答 1查看 244关注 0票数 0

我想使用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可调用的签名?有很多在运行时动态创建函数的包,这些包也创建签名。但这不是我的用例。

EN

回答 1

Stack Overflow用户

发布于 2019-08-26 17:20:55

我没有用绝地测试这一点,因为它看起来需要很多工作才能可靠地设置和复制,但也许下面的方法已经可以工作了。

检查可调用对象签名的规范方法是命名恰当的inspect.signature函数。它依赖于神奇的__annotations__属性,该属性可以在运行时修改:

代码语言:javascript
运行
复制
>>> 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57653513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档