If one does dir()
on some builtin callables (class constructors, methods, etc) on CPython 3.4, one finds out that many of them often have a special attribute called __text_signature__
, for example:
>>> print(object.__text_signature__)
()
>>> print(int.__text_signature__)
None
However the documentation for this is nonexistent. Furthermore, googling for the attribute name suggests that there is also another possible special attribute __signature__
, though I did not find any built-in functions that would have it.
I do know they are related to the function argument signature, but nothing beyond that, what do their values signify and what is the use of them?
These attributes are there to enable introspection for Python objects defined in C code. The C-API Argument Clinic provides the data, to assist the
inspect
module when buildingSignature
objects. Introspection of C-API functions was not supported before.See the internal
inspect._signature_fromstr()
function on how the__text_signature__
value is used.Currently, the
__text_signature__
attribute is filled from the internal docstring set on objects in the C-API; a simple text search is done forobjectname(...)\n--\n\n
, where the\n--\n\n
is typical of Attribute Clinic-generated documentation strings. Take a look at thetype
object slots if you wanted to find some examples. Or you could look at theaudioop
module source to see how the Argument Clinic is being used to define signatures; the Argument Clinic script is run on those when building to generate the docstrings (in the accompanyingaudioop.c.h
file).The
__signature__
attribute, if present, would be ainspect.Signature()
object; instead of providing a text version a C-API can provide a fully parsedSignature
instance instead.