gpt4 book ai didi

python - 如何在模拟 int 的类上支持 %x 格式

转载 作者:太空狗 更新时间:2023-10-30 00:53:12 29 4
gpt4 key购买 nike

我还没有找到这样做的方法。我在 Python 3.6.1(v3.6.1:69c0db5050,2017 年 3 月 21 日,01:21:04)中。 Sierra 下的 MacOS,尽管我们需要它才能在 Python 2 上工作。

我有一个自定义类,它做的事情看起来像带有子字段解码的 int。出于我自己的原因,我希望能够同时做两件事

inst * 4

inst.subfield << 1

(其中 subfield 是 inst 的属性)。这些对象高度重载,例如打印 inst 将转储子字段以供查看。

这一切都是通过重载所有自定义函数来处理数学和与其他对象的交互来完成的。总的来说,它工作得很好,但有一个明显的异常(exception):打印。在大多数情况下,用户可能会忘记这不是一个真正的整数并像使用整数一样使用它,但是使用整数打印命令将不起作用:

print("%#x"%inst)
TypeError: %x format: an integer is required, not CustomType

我确实重载了 __int__int(inst) 按预期返回了一个整数。

有什么办法可以实现吗?这是一个小问题,但我想解决这个问题。

此外,我确实实现了 __format__。所以 '{0:x}'.format(inst) 有效,但上面的打印无效。

谢谢!

最佳答案

您需要实现 __int____index__ :

class X(object):
def __int__(self):
return 42
def __index__(self):
return 42

x = X()
print('%#x' % x)

输出:

0x2a

来自 __index__ 的文档:

Called to implement operator.index(), and whenever Python needs to losslessly convert the numeric object to an integer object (such as in slicing, or in the built-in bin(), hex() and oct() functions). Presence of this method indicates that the numeric object is an integer type. Must return an integer.

所以__index__是由hex()调用的,查看PyNumber_ToBase中的相关源码可以看出.

关于python - 如何在模拟 int 的类上支持 %x 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49118656/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com