Besser?BlackJack hat geschrieben:@legargeomatrix: Wenn man mit 10⁷ Objekten arbeitet sollte man halt auch damit leben dass das etwas dauert.
Die Getter und Setter haben nichts mit OOP zu tun und wenn Du für ein Attribut *beides* hast, dann ist das totaler Unsinn weil es vom Effekt das selbe ist wie gleich auf das Attribut direkt zuzugreifen.
In Java macht man diesen Blödsinn statt einfach das Feld ``public`` zu deklarieren, weil man sich sonst später nicht umentscheiden kann einen "berechneten" Zugriff durchzuführen, ohne das sich Quelltext bei den ganzen vorhandenen Zugriffen auch ändern muss. Dieses Problem gibt es Python aber nicht -- dafür ist `property()` da. In Python machst Du Dir also nur völlig unnötige Schreibarbeit die den Quelltext ohne Mehrwert aufbläht und die Laufzeit verlangsamt.
Und wenn Du schon so auf OOP Wert legst, solltest Du Dir die erste Zeile in `delete()` vielleicht noch einmal überlegen ob das wirklich so toll ist die Polymorphie an der Stelle auszuhebeln in dem `Knoten.get_vater()` verwendet wird, egal von welchem Typ `self` wirklich ist. Du setzt da auch `self.kinder` auf eine leere Liste -- allerdings haben die Kinder ja wahrscheinlich einen Verweis auf *diesen* Knoten und der bleibt -- ist das okay?
@Hyperion: Properties gibt's in C# auch.
Code: Alles auswählen
class Knoten(object):
"""Knoten-Klasse fuer die Knoten des Spielbaums"""
def __init__(self, stellung, vater, tiefe):
self.stellung = stellung
#die Tiefe entspricht der Runde, in der der Knoten gespielt wurde
self.tiefe = tiefe
self.kinder = []
self.vater = vater
self.bewertung = None
self.blatt = False
#ersetzt del self, denn die pointers muessen entfernt werden
def delete(self, spielbaum):
for kind in self.kinder:
kind.vater = None
self.kinder = []
self.vater.kinder.remove(self)
spielbaum.remove(self)
return spielbaum