2 Namen für ein gleiches Attribut

8

Ich würde gerne wissen, ob es eine Möglichkeit gibt, zwei Attribute einer Klasse zu verknüpfen oder einem gleichen Attribut zwei Namen zu geben.

Zum Beispiel arbeite ich gerade an einem Skript, das ein Dreieck aus den Daten der Benutzer erstellt. Mein Dreieck ist ABC. Seiten dieses Dreiecks sind AB, BC und CA. Also hat das Dreieck diese 3 Attribute (self.AB, self.BC, self.CA). Aber AB = BA, also möchte ich Benutzern erlauben, print myInstance.BA statt print myInstance.AB zu machen.

Ich dachte also, das Attribut self.AB und die Eigenschaft BA (die self.AB zurückgeben) zu erstellen. Das funktioniert gut, wenn ich print myInstance.BA anstelle von print myInstance.AB versuche, aber ich bin gierig ...

Ich möchte auch zulassen, dass Benutzer myInstance.BA = 5 anstelle von myInstance.AB = 5 ausführen und dabei auch das Attribut AB bearbeiten.

Gibt es einen Weg, dies zu tun?

    
Morgan 03.06.2015, 21:05
quelle

2 Antworten

11

Python-Eigenschaften können Setter haben. Alles was du brauchst ist

%Vor% Wenn Sie sich auf die Reihenfolge der Attributnamen verlassen können, funktioniert dies generischer für z. Kanten bc, cd:

%Vor%     
deets 03.06.2015, 21:15
quelle
3

Eine Möglichkeit besteht darin, Ihre Seiten in einer benutzerdefinierten Implementierung eines Wörterbuchs zu speichern, wie in dieser SO-Antwort .

Der Vorteil dieser Technik ist, dass Sie nicht wissen müssen, wie die Namen der Seiten lauten werden, wenn Sie den Code schreiben.

Was wir getan haben, war die Hash-Lookup-Funktion zu ändern, so dass der Schlüssel sortiert wird, bevor das Wörterbuch nach einem Schlüssel sucht. Da der Schlüssel sortiert ist, wird ba zu ab usw. Die Sortierung erfolgt in der Funktion __keytransform__ in der Klasse SideDict .

%Vor%

Das Ausführen dieses Codes erzeugt:

%Vor%     
amccormack 03.06.2015 21:22
quelle

Tags und Links