我对何时调用类的__index__
方法感到困惑。我曾假设在索引操作中使用过该对象时将调用该方法。当对象是__index__
的子类时,我没有看到int
被调用。
In [1]: class foo(int):
...: def __new__(cls, value):
...: return int.__new__(cls, value)
...: def __index__(self):
...: return int(self)+1
In [2]: i=foo(0)
In [3]: i
Out[3]: 0
In [4]: i.__index__()
Out[4]: 1
In [5]: [0,1,2][:i.__index__()]
Out[5]: [0]
In [6]: [0,1,2][:i]
Out[6]: []
似乎int(i)
被用作索引,而不是i.__index__()
。我误会了什么?
经过编辑以简化和纠正示例。
答案 0 :(得分:0)
__index__
实现了对int
的无损转换。 Python仅在确实需要这种转换时才调用__index__
。就您而言,它不需要转换,因为您的i
已经是一个int值。 Python只是直接使用int值。
如果您想查看处理此问题的代码,则位于PyNumber_Index
下。