Skip to content

Instantly share code, notes, and snippets.

@L3viathan
Created January 5, 2016 14:51
Show Gist options
  • Save L3viathan/5b52b9a79d2ecb1e7015 to your computer and use it in GitHub Desktop.
Save L3viathan/5b52b9a79d2ecb1e7015 to your computer and use it in GitHub Desktop.
Shenanigans abusing magic methods
import random
import math
class Num(object):
def __init__(self, val):
self.value = val
self.bit = False
def __repr__(self):
return str(self.value)
def __abs__(self):
return self
def __floor__(self):
return Num(math.floor(self.value))
def __ceil__(self):
return Num(math.ceil(self.value))
def __trunc__(self):
return Num(math.trunc(self.value))
def __round__(self):
return Num(round(self.value))
def __pos__(self):
if self.bit:
self.value += 1
self.bit = False
else:
self.bit = True
return self
def __neg__(self):
if self.bit:
self.value -= 1
self.bit = False
else:
self.bit = True
return self
def __add__(self, other):
return Num(self.value + other)
def __radd__(self, other):
return Num(self.value + other)
def __iadd__(self, other):
self.value += other
return self
def __sub__(self, other):
return Num(self.value - other)
def __rsub__(self, other):
return Num(other - self.value)
def __isub__(self, other):
self.value -= other
return self
def __mul__(self, other):
return Num(self.value * other)
def __rmul__(self, other):
return Num(self.value * other)
def __imul__(self, other):
self.value *= other
return self
def __mod__(self, other):
return Num(self.value % other)
def __rmod__(self, other):
return Num(self.value % other)
def __imod__(self, other):
self.value %= other
return self
def __pow__(self, other):
return Num(self.value ** other)
def __rpow__(self, other):
return Num(self.value ** other)
def __ipow__(self, other):
self.value **= other
return self
def __floordiv__(self, other):
return Num(self.value // other)
def __rfloordiv__(self, other):
return Num(other // self.value)
def __ifloordiv__(self, other):
self.value //= other
return self
def __truediv__(self, other):
return Num(self.value / other)
def __rtruediv__(self, other):
return Num(other / self.value)
def __itruediv__(self, other):
self.value /= other
return self
def __invert__(self):
return Num(self.value + random.random()-0.5)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment