Advertisement
Guest User

Untitled

a guest
Sep 15th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.94 KB | None | 0 0
  1. from typing import Generic, TypeVar, Union, Dict, Any, Type, cast
  2.  
  3. T = TypeVar("T")
  4.  
  5.  
  6. class Indexed(Generic[T]):
  7. __slots__ = ("_index", "_value")
  8.  
  9. def __init__(self, index: int, value: T) -> None:
  10. self._index = index
  11. self._value = value
  12.  
  13. @property
  14. def index(self) -> int:
  15. return self._index
  16.  
  17. @property
  18. def value(self) -> T:
  19. return self._value
  20.  
  21. def __str__(self) -> str:
  22. return f"({self.index}, {self.value})"
  23.  
  24. def __eq__(self, other) -> bool:
  25. return isinstance(other, Indexed) and other.index == self.index and other.value == self.value
  26.  
  27. def __hash__(self) -> int:
  28. return hash(self.index) + 31 * hash(self.value)
  29.  
  30.  
  31. def serialize_index(i: Indexed[T]) -> Dict[str, Union[int, T]]:
  32. return {"index": i.index, "value": i.value}
  33.  
  34.  
  35. def deserialize_index(value_type: Type[T], d: Dict[str, Any]) -> Indexed[T]:
  36. return Indexed(index=d["index"], value=cast(value_type, d["value"]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement