基本上我想访问所有标准的 python int 运算符,例如 __and__
和 __xor__
等,特别是当结果最终打印出来时,我希望它以十六进制格式表示. (有点像让我的计算器进入十六进制模式)
class Hex(int):
def __repr__(self):
return "0x%x"%self
__str__=__repr__ # this certainly helps with printing
if __name__=="__main__":
print Hex(0x1abe11ed) ^ Hex(440720179)
print Hex(Hex(0x1abe11ed) ^ Hex(440720179))
理想情况下,两行输出都应为十六进制:0xfacade,但第一行输出十进制:16435934
有什么想法吗?
最佳答案
你应该分别定义__repr__
和__str__
:
class Hex(int):
def __repr__(self):
return "Hex(0x%x)" % self
def __str__(self):
return "0x%x" % self
__repr__
函数应该(如果可能的话)提供可以被eval()
用来重建原始对象的 Python 文本。另一方面,__str__
只能返回对象的人类可读表示。
关于python - 子类化 int 以获得十六进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1242589/