2014-09-15 5 views
8

Wenn man auf CPithon 3.4 dir() auf einigen eingebauten callables (Klassenkonstruktoren, Methoden, etc) tut, findet man heraus, dass viele von ihnen oft ein spezielles Attribut namens __text_signature__ haben :Was sind __signature__ und __text_signature__ in Python verwendet? 3.4

>>> print(object.__text_signature__) 
() 
>>> print(int.__text_signature__) 
None 

Die Dokumentation dafür ist jedoch nicht vorhanden. Darüber hinaus deutet das Googeln für den Attributnamen darauf hin, dass es auch ein anderes mögliches Spezialattribut __signature__ gibt, obwohl ich keine eingebauten Funktionen fand, die es haben würden.

Ich weiß, dass sie mit der Funktion Argument Signatur verwandt sind, aber nichts darüber hinaus, was bedeuten ihre Werte und was ist der Nutzen von ihnen?

Antwort

8

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

Siehe den internen inspect._signature_fromstr() function wie der __text_signature__ Wert verwendet wird.

Gegenwärtig wird das __text_signature__ Attribut aus dem internen Docstring-Set für Objekte in der C-API gefüllt; Eine einfache Textsuche erfolgt für objectname(...)\n--\n\n, wobei die \n--\n\n für Attribut Clinic-generierte Dokumentationsstrings typisch ist. Werfen Sie einen Blick auf die type object slots, wenn Sie einige Beispiele finden wollten. Oder Sie können sich die audioop module source ansehen, um zu sehen, wie die Argument Clinic zur Definition von Signaturen verwendet wird; Die Argument Clinic script wird auf denen beim Erstellen ausgeführt, um die Docstrings zu generieren (in den begleitenden audioop.c.h file).

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

+0

Es gibt einen schwerwiegenden Fehler in Ihrer Antwort, die C-API heißt Argument Clinic, eine Referenz auf die Monty Python Skizze mit dem gleichen Namen;) –

+0

@Antti: * Ich hab's dir mal gesagt *. –

+0

Der Anfang sagt immer noch "Attribut Clinic": D –

Verwandte Themen