Ich habe versucht zu untersuchen, wie das Deskriptorprotokoll funktioniert, wenn ich auf das Objekt der Klasse 'Wrapper-DeScriptor' selbst zugreifen würde. TypObject.c und fand zwei __Get __ Funktionen - Slot_tp_descr_get und Wrap_descr_get . Sie sind mit dem folgenden Befehl verwandt-< /p>
Code: Select all
TPSLOT(__get__, tp_descr_get, slot_tp_descr_get, wrap_descr_get,
"__get__($self, instance, owner=None, /)\n--\n\nReturn an attribute of instance, which is of type owner.")
Der Wrack_Descr_get ist eine Wrapper -Funktion, die den Slot_TP_DESCR_GET . > Ich habe festgestellt, dass es das __Get __ des Self -Arguments nennt. Wird es also unendlich laufen, wenn ein Objekt seines eigenen Typs übergeben wird? In der Funktion gibt es eine Return -Anweisung, die von einer If -Erklärung vorgelegt wurde, aber ich glaube nicht, dass sie ausgeführt wird. Da die 'if -Klausel' überprüft, ob die Klasse des Selbst ein __get __ implementiert, da wir ein Objekt dieser Klasse übergeben, wird das __Get __ .
Verwandte Frage < /p>
Wenn ich das unten geschriebene __Get __ < /code> wie die Funktionsklasse aufrufe. /p>
Code: Select all
def fun():
pass
type(fun).__get__
or
fun.__get__
ist das zugrunde liegende __Get __ der Funktionsklasse, die direkt von Wrack_descr_get oder gemäß dem Deskriptor -Protokoll aufgerufen wird, das nach der Klasse von __get __ (Wrapper sucht -Descriptor hier) und rufen Sie die __get __ der Klasse auf>