class lazy(object): def __init__(self, function): self._function = function def __get__(self, instance, owner = None): if instance == None: return self val = self._function(instance) setattr(instance, self._function.func_name, val) return val
class line(object): def __init__(self, line = None): self._line = line @lazy def items(self): return self._line.split()
Объяснение: items, коль скоро он декорируется, становится объектом класса lazy, и начинает восприниматься как дескриптор(descriptor). Поэтому __get__, __set__ и __delete__ могут быть определены у класса lazy. Конкретная реализация __get__ вычисляет значение функции и привязывает объект с результатом в качестве атрибута вместо себя на свое имя. Значит, последующие обращения к items — уже не вызов функции, а просто операции со списком, что вернулся при первом вызове.
1 комментарий:
The King Casino Hotel | Jamul Casino & Spa
The King 바카라사이트 Casino Hotel is set 1 mile south of Jamul Casino, 1 MPRC jancasino.com Blvd, Jamul, Georgia. 바카라 사이트 View https://jancasino.com/review/merit-casino/ map. This casino offers a variety of gaming options including nba매니아 slots,
Отправить комментарий