trcks.oop.BaseWrapper
Bases: Generic[_T_co]
Base class for all wrappers in the trcks.oop package.
Attributes:
-
core(_T_co) –The wrapped value.
Note
This class is not particularly useful by itself. If you want to wrap and process a value, please consider using one of its subclasses, such as trcks.oop.Wrapper.
Examples:
Wrapping and unwrapping an integer:
>>> from trcks.oop import BaseWrapper
>>> wrapped_integer = BaseWrapper(core=42)
>>> wrapped_integer
BaseWrapper(core=42)
>>> unwrapped_integer = wrapped_integer.core
>>> unwrapped_integer
42
Equality depends on the class and on the wrapped value:
>>> from trcks.oop import BaseWrapper
>>> BaseWrapper(core=42) == BaseWrapper(core=42)
True
>>> BaseWrapper(core=42) == BaseWrapper(core=0)
False
>>> class SubWrapper(BaseWrapper[int]):
... def __init__(self, core: int, metadata: str) -> None:
... super().__init__(core)
... object.__setattr__(self, "metadata", metadata)
>>> SubWrapper(core=42, metadata="x") == BaseWrapper(core=42)
False
>>> BaseWrapper(core=42) == SubWrapper(core=42, metadata="x")
False
>>> SubWrapper(core=42, metadata="x") == SubWrapper(core=42, metadata="y")
True
Same class and same wrapped value implies same hash:
>>> from trcks.oop import BaseWrapper
>>> hash(BaseWrapper(core=42)) == hash(BaseWrapper(core=42))
True
>>> class SubWrapper(BaseWrapper[int]):
... def __init__(self, core: int, metadata: str) -> None:
... super().__init__(core)
... object.__setattr__(self, "metadata", metadata)
>>> hash(
... SubWrapper(core=42, metadata="x")
... ) == hash(SubWrapper(core=42, metadata="y"))
True
Unhashable values lead to unhashable wrappers:
>>> from trcks.oop import BaseWrapper
>>> hash(BaseWrapper(core=[1, 2, 3]))
Traceback (most recent call last):
...
TypeError: unhashable type: 'list'
Wrappers are immutable:
>>> from trcks.oop import BaseWrapper
>>> wrapper = BaseWrapper(core=42)
>>> wrapper.core = 100
Traceback (most recent call last):
...
dataclasses.FrozenInstanceError: cannot assign to field 'core'
>>> del wrapper.core
Traceback (most recent call last):
...
dataclasses.FrozenInstanceError: cannot delete field 'core'
Source code in src/trcks/oop/_base_wrapper.py
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | |