Skip to content

Commit c5552c8

Browse files
authored
refactor: Lazy object
1 parent 7af0fdd commit c5552c8

1 file changed

Lines changed: 24 additions & 24 deletions

File tree

injection/_core/common/lazy.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,37 @@
1-
from collections.abc import Callable, Iterator
2-
from functools import partial
1+
from collections.abc import Callable
2+
from contextlib import suppress
33

44
from injection._core.common.invertible import Invertible
55

66

7-
def lazy[T](factory: Callable[..., T]) -> Callable[[], T]:
8-
def cache() -> Iterator[T]:
9-
value = factory()
10-
while True:
11-
yield value
12-
13-
return partial(next, cache())
14-
15-
167
class Lazy[T](Invertible[T]):
17-
__slots__ = ("__get", "__is_set")
8+
__slots__ = ("__factory", "__value")
189

19-
__get: Callable[[], T]
20-
__is_set: bool
10+
__factory: Callable[[], T]
11+
__value: T
2112

2213
def __init__(self, factory: Callable[..., T]) -> None:
23-
@lazy
24-
def get() -> T:
25-
value = factory()
26-
self.__is_set = True
27-
return value
28-
29-
self.__get = get
30-
self.__is_set = False
14+
self.__factory = factory
3115

3216
def __invert__(self) -> T:
33-
return self.__get()
17+
return self.value
3418

3519
@property
3620
def is_set(self) -> bool:
37-
return self.__is_set
21+
try:
22+
self.__value
23+
except AttributeError:
24+
return False
25+
26+
return True
27+
28+
@property
29+
def value(self) -> T:
30+
with suppress(AttributeError):
31+
return self.__value
32+
33+
value = self.__factory()
34+
del self.__factory
35+
36+
self.__value = value
37+
return value

0 commit comments

Comments
 (0)