__slots__По умолчанию Python хранит атрибуты экземпляра в словаре экземпляра (__dict__). Объявление __slots__ заменяет этот словарь на фиксированную, предварительно выделенную структуру, ограничивая экземпляры только явно определёнными атрибутами.
Без __slots__ каждый экземпляр тащит за собой объект __dict__, который даёт заметные накладные расходы. Использование __slots__ может снизить потребление памяти до ~50%, что критично при создании большого количества экземпляров.
class Point:
__slots__ = ('x', 'y')
def __init__(self, x, y):
self.x = x
self.y = y
Доступ к атрибутам работает немного быстрее, потому что Python обращается к атрибутам слотов через дескрипторы с фиксированным смещением вместо поиска по словарю.
__slots____dict__ больше не доступен для каждого экземпляра (если только ты не добавил его явно в __slots__)__slots__, выигрыш в памяти теряетсяКогда в классе определен __slots__, Python всё равно создает __dict__ для каждого экземпляра, если только __dict__ не включен явно в кортеж __slots__.
Новый — ещё не проверен сообществом
Вы