Verwendung von __Slots__?

__slots__ ist eine Möglichkeit, einen festen Satz von Attributen für eine Klasse anzugeben, die dazu beitragen kann, Speicherplatz in bestimmten Situationen zu sparen. Anstatt für jine Instanz ein dynamisches Wörterbuch zur Speicherung der Attribute zu haben, haben Instanzen einer Klasse mit definierten __slots__ nur Platz für die in __slots__ aufgelisteten Attribute allokiert. Das kann nützlich sein, wenn Sie eine große Anzahl von Instanzen haben und Speicherplatz sparen möchten.

Hier ist ein Beispiel für eine Klasse, die __slots__ verwendet:

class MyClass:
    __slots__ = ['a', 'b']

    def __init__(self, a, b):
        self.a = a
        self.b = b

obj = MyClass(1, 2)
print(obj.a) # 1
print(obj.b) # 2

In diesem Beispiel verwendet MyClass __slots__, um anzugeben, dass Instanzen der Klasse nur Platz für die Attribute a und b allokiert haben sollen. Wenn man versucht, ein Attribut, das nicht in slots ist, festzulegen, wird ein AttributeError ausgelöst.

obj.c = 3 # AttributeError: 'MyClass' object has no attribute 'c'

Beachten Sie, dass __slots__ nur den Speicherverbrauch von Instanzen der Klasse und nicht die Klasse selbst beeinflusst. Es deaktiviert auch die Erstellung von Instanzwörterbuch, so dass Sie keine neuen Attribute zu den Klasseninstanzen hinzufügen können, nachdem sie erstellt wurden.