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 building Signature
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 for objectname(...)\n--\n\n
, where the \n--\n\n
is typical of Attribute Clinic-generated documentation strings. Take a look at the type
object slots if you wanted to find some examples. Or you could look at the audioop
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 accompanying audioop.c.h
file).
The __signature__
attribute, if present, would be a inspect.Signature()
object; instead of providing a text version a C-API can provide a fully parsed Signature
instance instead.