您可以将int子类化并编写一个__new__,将所需输入解析为整数的二进制。我现在有char和一个字符串,支持0和1。在
现在,您可以将它作为一个整数,以及它的所有二进制运算方法。只有使用这些方法时,它才会一直转换为整数。因此,您必须使用魔术函数(双下划线或dunders)覆盖所有这些方法,以继续返回二进制类。这可能是重复的,但是使用其他一些python魔术,它可以非常简洁地完成。在class Binary(int):
def __new__(self, val):
if type(val) is str:
if len(val) > 1:
val = int(val, 2)
else:
val = ord(val)
return super().__new__(self, val)
dunders_binary = "and rand add radd sub rsub mul rmul lshift rlshift " + \
"rshift rrshift and rand or ror xor rxor"
for dunder in ("__%s__" % s for s in dunders_binary.split()):
locals()[dunder] = lambda self, other, __f=dunder: \
self.__class__(getattr(super(), __f)(other))
dunders_unary = "neg pos invert"
for dunder in ("__%s__" % s for s in dunders_unary.split()):
locals()[dunder] = lambda self, __f=dunder: \
self.__class__(getattr(super(), __f)())
def __repr__(self):
return bin(self)
def __str__(self):
return bin(self)