51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
from functools import total_ordering
|
|
|
|
|
|
@total_ordering
|
|
class MutInt:
|
|
__slots__ = ['value']
|
|
|
|
def __init__(self, value):
|
|
self.value = value
|
|
|
|
def __str__(self):
|
|
return str(self.value)
|
|
|
|
def __repr__(self):
|
|
return f'MutInt({self.value!r})'
|
|
|
|
def __format__(self, fmt):
|
|
return format(self.value, fmt)
|
|
|
|
def __add__(self, other):
|
|
if isinstance(other, MutInt):
|
|
return MutInt(self.value + other.value)
|
|
elif isinstance(other, int):
|
|
return MutInt(self.value + other)
|
|
else:
|
|
return NotImplemented
|
|
|
|
def __eq__(self, other):
|
|
if isinstance(other, MutInt):
|
|
return self.value == other.value
|
|
elif isinstance(other, int):
|
|
return self.value == other
|
|
else:
|
|
return NotImplemented
|
|
|
|
def __lt__(self, other):
|
|
if isinstance(other, MutInt):
|
|
return self.value < other.value
|
|
elif isinstance(other, int):
|
|
return self.value < other
|
|
else:
|
|
return NotImplemented
|
|
|
|
def __int__(self):
|
|
return self.value
|
|
|
|
def __float__(self):
|
|
return float(self.value)
|
|
|
|
__index__ = __int__
|