Coverage for src/extratools_core/defaultlist.py: 0%

14 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-03 04:52 -0700

1from collections import UserList 

2from collections.abc import Callable 

3from typing import override 

4 

5 

6class DefaultList[T](UserList): 

7 def __init__(self, default: Callable[[], T]) -> None: 

8 super().__init__() 

9 

10 self.__default = default 

11 

12 def __grow(self, index: int) -> None: 

13 if index >= len(self): 

14 self.extend([self.__default()] * (index + 1 - len(self))) 

15 

16 @override 

17 def __setitem__(self, index: int, value: T) -> None: 

18 self.__grow(index) 

19 super().__setitem__(index, value)