【发布时间】:2010-11-17 13:46:52
【问题描述】:
基本上我想访问所有标准的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
有什么想法吗?
【问题讨论】:
-
为什么不直接使用内置函数
hex()? docs.python.org/library/functions.html#hex -
在众多不同的适当位置插入 hex() 将既耗时又不精确。切换任何 Hex(int) 类型的表示将是一个简单的重构。但是:我认为需要重载所有 Hex/int 二元运算符以返回 Hex 结果(目前它们仍然产生 int)。也许有一个“混合”用于批量重载运算符。
标签: python hex subclassing representation