首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python3.4中__signature__和__text_signature__用于什么?

在Python3.4中__signature__和__text_signature__用于什么?
EN

Stack Overflow用户
提问于 2014-09-15 11:28:25
回答 2查看 5.3K关注 0票数 19

如果在dir() 3.4上对某些内置的可调用类(类构造函数、方法等)执行CPython,则会发现其中许多类通常具有一个名为__text_signature__的特殊属性,例如:

代码语言:javascript
复制
>>> object.__text_signature__
'()'
>>> int.__text_signature__
>>> # was None

但是,这方面的文档并不存在。此外,谷歌搜索属性名表明,还有另一个可能的特殊属性__signature__,尽管我没有找到任何内置函数。

我知道它们与函数参数签名有关,但除此之外,它们的价值意味着什么,它们的用途是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-15 11:30:29

这些属性的存在是为了支持C代码中定义的Python对象的内省。C-API论证诊所提供数据,以帮助inspect模块构建对象。以前不支持C函数的内省.

关于如何使用__text_signature__值,请参见内部__text_signature__

目前,__text_signature__属性是从Clinic中对象的内部docstring集中填充的;对objectname(...)\n--\n\n进行了简单的文本搜索,其中\n--\n\n是典型的属性诊所生成的文档字符串。如果您想找到一些例子,请看一下对象槽。或者您可以查看模块源,查看参数诊所是如何用于定义签名的;论证诊所脚本是在构建生成文档字符串时运行的(在随附的文件中)。

如果存在__signature__属性,它将是一个inspect.Signature()对象;而不是提供文本版本,而是can可以提供一个完全解析的Signature实例。

票数 16
EN

Stack Overflow用户

发布于 2020-12-27 04:59:36

快速总结

inspect.signature()函数使用这两个属性检索有关函数或方法的调用签名的元数据。

真实世界应用

手动指定这些属性之一的一个用例是为使用*args的函数提供有用的工具提示。

在本例中,随机范围()方法使用*args接受可变数量的输入。但是,我们希望提供给help()的签名和工具提示来显示每个参数的含义,以便它与相应的https://docs.python.org/3/library/stdtypes.html#range函数匹配。

代码语言:javascript
复制
import random

class Random(random.Random):
    
    def randrange(self, /, *args):
        'Choose a random value from range(start[, stop[, step]]).'
        return self.choice(range(*args))

    randrange.__text_signature__ = '($self, start, stop=None, step=1, /)'

__text_signature__属性通知签名对象的创建:

代码语言:javascript
复制
>>> inspect.signature(Random.randrange)
<Signature (self, start, stop=None, step=1, /)>

这使得help()输出更加有用:

代码语言:javascript
复制
>>> help(Random.randrange)
Help on function randrange in module __main__:

randrange(self, start, stop=None, step=1, /)
    Choose a random value from range(start[, stop[, step]]).
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25847035

复制
相关文章

相似问题

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