Login Sign Up
Advert
Your ad spot
Reserve this exclusive slot for the selected period.
Buy advertising →
Telegram community logo - Python Nation🐍🇺🇦
Added 06 Jan 2025 🌐 UK

Python Nation🐍🇺🇦

@pythonnation
Number of subscribers: 1 930
Photos: 1
Links: 1
Description:
Канал для всіх, хто вивчає Python: поради, приклади коду, бібліотеки, лайфхаки та актуальні новин👨💻🐍 По всім питанням👉 @giorg_jr
Source

Python Nation🐍🇺🇦 | slots__ - коли обʼєктів багатоЗа замовчуванням кожен обʼєкт у пайтоні ...

Telegram community logo - Python Nation🐍🇺🇦 Python Nation🐍🇺🇦 @pythonnation
316 Views/Reach 2026-09-25 07:03 Message №720
__slots__ - коли обʼєктів багато

За замовчуванням кожен обʼєкт у пайтоні тримає свій __dict__, тобто словник з атрибутами. Це зручно бо можна додати будь-який атрибут на льоту, але словник займає памʼять. Коли обʼєктів кілька то це не є проблемою, а от коли їх багато, то вже стає помітно по пам'яті.

__slots__ каже класу: атрибути тільки ці, словник не потрібен.

class Receipt:
__slots__ = ("id", "total", "paid")

def __init__(self, id, total, paid):
self.id = id
self.total = total
self.paid = paid

Що це дає:
- менше памʼяті на кожен обʼєкт (немає __dict__)
- трохи швидший доступ до атрибутів

Ціна - гнучкість. Новий атрибут вже не додаси:

r = Receipt(1, 100, True)
r.discount = 10 # AttributeError

І ще пара нюансів: наслідування працює, але кожен клас у ланцюгу має свої __slots__, інакше __dict__ повернеться. З @dataclass теж дружить - просто @dataclass(slots=True).

Коротко: якщо клас створюється багато разів і набір полів фіксований - __slots__ економить реальну памʼять. Для звичайних класів це зайве.