#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.
Комментариев нет:
Отправить комментарий