当前位置: 首页 > 面试题库 >

Python 3.4中使用的__signature__和__text_signature__是什么

司业
2023-03-14
问题内容

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

>>> object.__text_signature__
'()'
>>> int.__text_signature__
>>> # was None

但是,此文档不存在。此外,对属性名称进行谷歌搜索表明还存在另一个可能的特殊属性__signature__,尽管我没有找到任何内置的特殊功能。

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


问题答案:

使用这些属性可以对C代码中定义的Python对象进行自省。的C-API参数诊所提供数据,以协助inspect建立时模块Signature的对象。以前不支持对C-API函数的自省。

有关如何使用该值,请参见内部inspect._signature_fromstr()函数__text_signature__

当前,该__text_signature__属性是根据C-
API中对象上的内部文档字符串集填充的;对进行了简单的文本搜索objectname(...)\n--\n\n,其中\n--\n\n典型的是Attribute
Clinic生成的文档字符串。如果要查找一些示例,请查看type对象插槽。或者,您可以查看audioop模块源代码,以了解如何使用Argument
Clinic定义签名。该参数诊所脚本正在建设时产生的文档字符串(在所附的那些运行audioop.c.h文件)。

__signature__属性(如果存在)将是一个inspect.Signature()对象;代替提供文本版本,C-API可以提供完全解析的Signature实例。



 类似资料:
  • Jackson中使用的注释是什么? ======================================== ============================================== 我的理解是,它还保留了被序列化的对象的具体类型以及实际数据。 我不清楚的是反序列化过程中的实际优势/收益是什么。 除了java文档之外,没有任何重要的文档。任何人都可以在这里提供帮助或提供

  • 我是Python的初学者,已经开始使用PyCharm IDE。每当我运行一个程序时,我都会在控制台上得到一长串错误,比如: 线程pydevd.CheckAliveThread:Traceback(最近一次调用):文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/threading.py”,第921行,在_boots

  • Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。

  • 本文向大家介绍Windows7下Python3.4使用MySQL数据库,包括了Windows7下Python3.4使用MySQL数据库的使用技巧和注意事项,需要的朋友参考一下 Python3.4使用MySQL数据库的详细过程,具体内容如下 Windows版本: Windows7-64bit Python版本: python3.4.14-32bit MySQL版本: MySQL 5.7.17 一.M

  • 问题内容: 在jackson中使用的@JsonTypeInfo和@JsonSubTypes注释是什么? ======================================= ============================================== 我了解的是 ,它还保留了要序列化的对象的具体类型以及实际数据。 我不清楚 反序列化期间的实际优势/收益是什么。 除了Jav

  • 什么是需要的