Was sind __signature__ und __text_signature__, die in Python 3.4 verwendet werden?

9

Wenn man in CPython 3.4 dir() auf einige eingebaute Callables (Klassenkonstruktoren, Methoden usw.) ausführt, findet man heraus, dass viele von ihnen oft ein spezielles Attribut namens __text_signature__ haben, zum Beispiel:

%Vor%

Die Dokumentation dafür existiert jedoch nicht. Außerdem deutet das Googeln für den Attributnamen darauf hin, dass es auch ein anderes mögliches Spezialattribut __signature__ gibt, obwohl ich keine eingebauten Funktionen gefunden habe, die es haben würden.

Ich weiß, dass sie mit der Signatur des Funktionsarguments verwandt sind, aber nichts darüber hinaus, was bedeuten ihre Werte und was nützen sie?

    
Antti Haapala 15.09.2014, 11:28
quelle

1 Antwort

8

Diese Attribute dienen dazu, Introspektion für in C-Code definierte Python-Objekte zu ermöglichen. Die C-API-Argument-Klinik stellt die Daten bereit, um das inspect -Modul beim Erstellen von Signature objects . Die Überprüfung der C-API-Funktionen wurde vorher nicht unterstützt.

Siehe die interne Funktion inspect._signature_fromstr() zur Angabe des __text_signature__ Wert wird verwendet.

Momentan wird das __text_signature__ -Attribut aus dem internen Docstring-Set für Objekte in der C-API gefüllt; Für objectname(...)\n--\n\n wird eine einfache Textsuche durchgeführt, wobei \n--\n\n typisch für Attribute Clinic-generierte Dokumentationszeichenfolgen ist. Schauen Sie sich die type Objekt-Slots an, wenn Sie welche finden möchten Beispiele. Oder Sie können sich die Modulquelle audioop ansehen, um zu sehen, wie die Argument Clinic ist verwendet werden, um Signaturen zu definieren; Das Skript "Argument Clinic" wird beim Erstellen der Docstrings ausgeführt (in die zugehörige audioop.c.h -Datei ).

Das __signature__ -Attribut, falls vorhanden, wäre ein inspect.Signature() -Objekt; Anstatt eine Textversion bereitzustellen, kann eine C-API stattdessen eine vollständig analysierte Signature -Instanz bereitstellen.

    
Martijn Pieters 15.09.2014, 11:30
quelle