Страницы

Поиск по вопросам

понедельник, 16 декабря 2019 г.

Python __slots__ - почему нельзя использовать всегда?

#python #python_3x


Вопрос был задан после прочтения - Usage of slots?
    

class WithSlots(object):

    __slots__ = 'static_attr'


Прочитав про слоты в пайтоне, о том, что они экономят память, я понял только одну
вещь, что когда много экземпляров класса создается, то это выгодно(использование слотов).   

И в связи с этим у меня возник такой вопрос, раз у слотов есть преимущество в виде
экономии памяти, то почему нельзя его использовать всегда?

Какие проблемы создает слотс, давая взамен экономию памяти?
    


Ответы

Ответ 1



Они ограничивают набор атрибутов класса - из-за чего нельзя свободно добавлять любые атрибуты и исполнять всякие безумные наследования, как многие любят. Выскочит AttributeError. Когда код переписываешь или как упомянули создаётся большое количество, то можно добавить слоты и ускорить работу скрипта, но чаще всего программист идёт "непроторённой" дорогой - там не до слотов. import time class Timer: def __enter__(self): self.start = time.clock() return self def __exit__(self, *args): self.end = time.clock() self.interval = self.end - self.start class A: pass class B(object): __slots__ = ('a', 'b',) def my(class_): my_obj = class_ my_obj.a = 10 my_obj.b = "qwerty" print my_obj.a, my_obj.b with Timer() as t1: for _ in range(1000): my(A()) with Timer() as t2: for _ in range(1000): my(B()) print('Time1: {} sec.'.format(t1.interval)) print('Time2: {} sec.'.format(t2.interval)) # Time1: 0.0264316595496 sec. # Time2: 0.0241797159653 sec.

Комментариев нет:

Отправить комментарий