Jedes Mal, wenn wir eine neue Klasse erstellen, speichert Python jedes Attribut in einemdict-Attribut, das als dynamisches Wörterbuch bezeichnet wird. Dieses Standardverhalten scheint praktisch zu sein, da es flexibel ist, aber wenn Sie mit einer großen Anzahl von Instanzen arbeiten oder die Speichernutzung wichtig ist, kann dieser Mehraufwand erheblich sein.
Python verwendet grundsätzlich ein Wörterbuch zum Speichern von Klassenattributen, aber eine der Alternativen ist die Verwendung vonSlots. Durch die Definition dieses Namens weisen wir Python an, eine statischere und kompaktere Struktur zu verwenden, die den Speicherverbrauch erheblich reduziert. Hier ist ein einfaches Beispiel für die Verwendung von Slots in einer Klasse.
import sys class WithoutSlots: def __init__(self, x, y): self.x = x self.y = y class WithSlots: __slots__ = ['x', 'y'] def __init__(self, x, y): self.x = x self.y = y obj1 = WithoutSlots(1, 2) obj2 = WithSlots(1, 2) print(sys.getsizeof(obj1.__dict__)) # 296 print(sys.getsizeof(obj2)) # 48
Wie oben gezeigt, verbraucht „WithoutSlots“ viel mehr Speicher als „WithSlots“. Denken Sie darüber nach, viele Instanzen der Klasse zu erstellen. Welcher Ansatz wäre die bessere Wahl?
Slotskönnen ein nützliches Werkzeug sein, haben aber Einschränkungen:
obj = WithSlots(1, 2) obj.z = 3 # This will raise an AttributeError
Wir können dies umgehen, indem wirdictzumSlothinzufügen.
Keine Mehrfachvererbung: Jede Basisklasse muss definierteSlotsenthalten, andernfalls verwendet Python wieder das Wörterbuch zum Speichern der Instanzattribute.
Kein Standardwert: Sie müssen Standardwerte explizit in der Init-Methode initialisieren.
Ich habe einige der besten Szenariobeispiele aufgeschrieben, in denen wir Slots verwenden können:
So werdenSlotsin Python verwendet: Sie können sie verwenden, wenn Sie sicher sind, dass Sie keine anderen Attribute für Ihre Klasse benötigen und mit denen Sie arbeiten eine große Anzahl von Instanzen. Durch die Definition vonSlotsweisen Sie Python an, eine effizientere und kompaktere Struktur zum Speichern von Attributen zu verwenden, was hilft, Speicherplatz zu sparen. Dies ist besonders praktisch, wenn die Speichernutzung ein Problem darstellt oder Sie die Leistung optimieren müssen. Denken Sie daran, dass Sie mitSlotskeine neuen Attribute dynamisch hinzufügen können. Daher ist die Verwendung am besten, wenn Ihre Klassenattribute fest und klar definiert sind.
Das obige ist der detaillierte Inhalt vonNutzung von __slots__ für eine bessere Leistung in Python-Klassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!