[Entschuldigung, ich bin neu in Python. Obwohl es eine sehr grundlegende Frage zu sein scheint, habe ich meinen Anteil an Due Diligence geleistet, bevor ich diese Zuhörerschaft gebeten habe, wirklich dumme Fragen zu vermeiden.]
Ich versuche das richtige Idiom für die Rückgabe eines l-Wertes aus einer Funktion herauszufinden. Angenommen, ich habe einen Container mit 64 Objekten und möchte einen Verweis auf diese Objekte zurückgeben können.
%Vor%Dann von außerhalb der Klasse möchte ich:
%Vor%Ich möchte also, dass die Funktion 'at' einen lvalue zurückgibt (so etwas wie eine Referenz in C ++), aber ich kann nichts finden, was einer Referenz oder einem Zeiger in der Sprache ähnelt. Wenn ich eine Liste in jedem Quadrat, das ein Stück enthält, gespeichert habe, könnte ich etwas wie board.square (0,0) [0] = Piece machen - aber es scheint verrückt (oder auch nicht - Wie gesagt, ich bin neu in der Sprache).
Wie würden Sie diese Datenstruktur angehen?
In Python ist alles eine Referenz. Das einzige Problem ist, dass None
unveränderlich ist. Daher können Sie den Rückgabewert nicht verwenden, um den Wert zu ändern.
Sie können den Zuweisungsoperator auch nicht überschreiben, so dass Sie diese besondere Art von Verhalten nicht erhalten. Eine gute und sehr flexible Lösung wäre jedoch, die __setitem__
und __getitem__
Methoden zur Implementierung des Subskriptionsoperators ( []
) für die Klasse:
Verwendung:
%Vor%Wie Niklas betont, können Sie keinen l-Wert zurückgeben.
Sie können jedoch nicht nur das Abonnement überschreiben, sondern auch Eigenschaften (eine Anwendung von Deskriptoren: Ссылка ), um ein Objektattribut zu erstellen, das beim Lesen oder bei der Zuordnung Code ausführt.
Sie können so etwas versuchen, allerdings auf Kosten von falschen [:] Indexern:
%Vor%Dann können Sie
tun %Vor%Und so weiter. Es spielt eigentlich keine Rolle, was du in die [] s steckst, es muss einfach etwas sein.
(Hat die Idee von den Proxies Perl6 verwendet, um dies zu tun)
Tags und Links python