curse.py
curse.py (797 bytes)
from dataclasses import dataclass
import functools
import typing
@dataclass(frozen=True)
class Cursed[T ,R]:
fun: typing.Callable[[T], R]
@typing.overload
def __ror__(self, arg: T, /) -> R:
...
@typing.overload
def __ror__(self, arg: list[T], /) -> list[R]:
...
def __ror__(self, arg):
if isinstance(arg, list):
return [self(ai) for ai in arg]
return self.fun(arg)
def __call__(self, arg: T) -> R:
return self.fun(arg)
def __repr__(self) -> str:
return f"<Cursed wrapper of {self.fun.__name__}>"
#@functools.wraps
def curse(f):
return Cursed(f)
if __name__ == '__main__':
abs = curse(abs)
print(abs)
print(abs(-3))
print(-3 | abs)
print([1, -3, 9, -27] | abs)