HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: python, программирование на python, словарь в python, разработка на python</p>
1 <p>Теги: python, программирование на python, словарь в python, разработка на python</p>
2 <p>По умолчанию Python хранит атрибуты объекта в словаре под названием __dict__.<strong>Словари</strong>, в свою очередь, представляют собой хеш-таблицы с открытой адресацией, которые ещё и расширяются при заполнении на ⅔. Такая конструкция даёт быстрый доступ к значению по ключу, но влечёт накладные расходы по занимаемой памяти.</p>
2 <p>По умолчанию Python хранит атрибуты объекта в словаре под названием __dict__.<strong>Словари</strong>, в свою очередь, представляют собой хеш-таблицы с открытой адресацией, которые ещё и расширяются при заполнении на ⅔. Такая конструкция даёт быстрый доступ к значению по ключу, но влечёт накладные расходы по занимаемой памяти.</p>
3 <p>Тогда получается, что могут возникнуть проблемы, если появится необходимость наплодить миллионы объектов какого-то типа. Тут на помощь приходит атрибут класса __slots__. Это “указание” интерпретатору на то, что атрибуты объектов класса, перечисленные в __slots__, нужно хранить<strong>в кортеже, а не словаре</strong>(важный нюанс: __slots__ учитывается для каждого класса индивидуально и не наследуется).</p>
3 <p>Тогда получается, что могут возникнуть проблемы, если появится необходимость наплодить миллионы объектов какого-то типа. Тут на помощь приходит атрибут класса __slots__. Это “указание” интерпретатору на то, что атрибуты объектов класса, перечисленные в __slots__, нужно хранить<strong>в кортеже, а не словаре</strong>(важный нюанс: __slots__ учитывается для каждого класса индивидуально и не наследуется).</p>
4 <p>При этом объекты класса не смогут иметь какие-то другие атрибуты, кроме указанных в __slots__. Стоит отметить, что данное свойство является побочным эффектом и не рекомендуется в качестве средства ограничения функциональности объектов класса.</p>
4 <p>При этом объекты класса не смогут иметь какие-то другие атрибуты, кроме указанных в __slots__. Стоит отметить, что данное свойство является побочным эффектом и не рекомендуется в качестве средства ограничения функциональности объектов класса.</p>
5 <p>Интересно, что в __slots__ можно указать атрибут __dict__ и, таким образом, получить назад возможность динамически добавлять атрибуты, но это может<strong>свести на нет пользу от оптимизации</strong>потребления памяти.</p>
5 <p>Интересно, что в __slots__ можно указать атрибут __dict__ и, таким образом, получить назад возможность динамически добавлять атрибуты, но это может<strong>свести на нет пользу от оптимизации</strong>потребления памяти.</p>
6 <p>Именно поэтому прежде чем использовать в своем классе __slots__, обязательно стоит вспомнить классическое высказывание Дональда Кнута:<em>"Преждевременная оптимизация - корень всех зол"</em>- и подумать ещё раз.</p>
6 <p>Именно поэтому прежде чем использовать в своем классе __slots__, обязательно стоит вспомнить классическое высказывание Дональда Кнута:<em>"Преждевременная оптимизация - корень всех зол"</em>- и подумать ещё раз.</p>
7  
7