Sobes.tech
Junior — Middle

Kas saaksite selgitada, mis on __slots__ Pythonis ja kuidas see mõjutab objektide mälu haldamist?

sobes.tech AI

Vastus AI-lt

__slots__ в Python — это механизм, который позволяет ограничить набор атрибутов, которые могут быть у экземпляров класса, и тем самым оптимизировать использование памяти.

По умолчанию каждый объект Python хранит свои атрибуты в словаре (__dict__), что занимает дополнительную память. Если определить __slots__ в классе, Python не создаёт словарь для каждого экземпляра, а выделяет фиксированное пространство для указанных атрибутов.

Пример использования:

class Point:
    __slots__ = ('x', 'y')  # только эти атрибуты допустимы

    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(1, 2)
print(p.x, p.y)  # 1 2

# p.z = 3  # вызовет AttributeError, так как 'z' не в __slots__

Таким образом, __slots__ снижает потребление памяти и может немного ускорить доступ к атрибутам, но ограничивает динамическое добавление новых атрибутов.