Python 3.5:int don';你不调用_索引_方法吗?
我不知道什么时候调用类的Python 3.5:int don';你不调用_索引_方法吗?,python,python-3.x,Python,Python 3.x,我不知道什么时候调用类的\uuuu index\uuu方法。我假设在索引操作中使用对象时会调用该方法。当对象是int的子类时,我看不到调用\uuuuuuuu索引\uuuuuuuuu In [1]: class foo(int): ...: def __new__(cls, value): ...: return int.__new__(cls, value) ...: def __index__(self): ...: re
\uuuu index\uuu
方法。我假设在索引操作中使用对象时会调用该方法。当对象是int
的子类时,我看不到调用\uuuuuuuu索引\uuuuuuuuu
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.\uuu index\uuu()
。我误解了什么
编辑以简化和更正示例。
\uuuuu索引
实现到int
的无损转换。Python只在实际需要这样的转换时调用\uuuuuuuuuuuuuuuuuuuuuuuuuuu
。在您的例子中,它不需要转换,因为您的i
已经是一个int。Python只是直接使用int值
如果您想查看处理此问题的代码,请参阅。
\uuuu index\uuuu
实现到int
的无损转换。Python只在实际需要这样的转换时调用\uuuuuuuuuuuuuuuuuuuuuuuuuuu
。在您的例子中,它不需要转换,因为您的i
已经是一个int。Python只是直接使用int值
如果您想查看处理此问题的代码,请参阅。您没有误解任何内容。请参阅“为了拥有一个一致的整数类型类,当定义了_index _;()时,还应定义_int _;(),两者都应返回相同的值。”似乎您现在有一个问题相关:@Jean François Fabre是的,我现在有一个问题,谢谢大家。您没有误解任何东西。请参阅“为了有一个一致的整数类型类,当定义了uu index uu()时,也应该定义u int u(),两者都应该返回相同的值。”看来你现在有问题了:@Jean-François Fabre是的,我现在确实有问题,谢谢大家。