Probleme mit gemeinsam genutzten Klassendaten überwinden
Bei der objektorientierten Programmierung ist es wünschenswert, die Klassendaten für jede Instanz unterschiedlich zu halten. Ein häufiges Problem tritt jedoch auf, wenn Klassendaten versehentlich zwischen Instanzen geteilt werden, was zu unerwartetem Verhalten führt.
Das Problem:
Bedenken Sie den folgenden Code:
class a: list = [] x = a() y = a() x.list.append(1) y.list.append(2) x.list.append(3) y.list.append(4) print(x.list) # prints [1, 2, 3, 4] print(y.list) # prints [1, 2, 3, 4]
In diesem Beispiel teilen sich die Instanzen x und y der Klasse a dieselbe Liste. Infolgedessen werden durch das Anhängen von Elementen an x.list diese auch zu y.list hinzugefügt, was einen Verstoß gegen das beabsichtigte Verhalten darstellt.
Die Lösung:
Um gemeinsame Klassendaten zu verhindern, Instanzmitglieder sollten innerhalb einzelner Instanzmethoden statt in der Klassendeklaration deklariert werden. In Python wird für diesen Zweck häufig die Methode __init__ verwendet.
class a: def __init__(self): self.list = []
Durch die Initialisierung der Listenvariablen innerhalb der Methode __init__ erhält jede Instanz von a ihre eigene unabhängige Kopie der Liste.
Erwartetes Verhalten:
Mit dieser Änderung kann das beabsichtigte Verhalten erreicht werden erreicht:
x = a() y = a() x.list.append(1) y.list.append(2) x.list.append(3) y.list.append(4) print(x.list) # prints [1, 3] print(y.list) # prints [2, 4]
Die Trennung von Klassendaten mit diesem Ansatz garantiert, dass jede Instanz über ihren eigenen, einzigartigen Datensatz verfügt, wodurch das Problem gemeinsamer Daten zwischen Instanzen entfällt.
Das obige ist der detaillierte Inhalt vonWie kann ich Probleme mit gemeinsam genutzten Klassendaten bei der objektorientierten Programmierung vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!