Python 3中的__int__和__index__方法有什么区别?

时间:2009-12-14 00:11:34

标签: python casting

The Data Model section of the Python 3.2 documentation__int____index__方法提供了以下说明:

  

object.__int__(self)

     

被调用以实现内置的[function int()]。应该返回[整数]。

     

object.__index__(self)

     

被要求实施operator.index()。每当Python需要一个整数对象时(例如在切片中,或在内置的bin()hex()oct()函数中)也会调用。必须返回一个整数。

我知道它们用于不同的目的,但我一直无法弄清楚为什么需要两种不同的方法。这些方法有什么区别?在我的班级中对__index__ = __int__进行别名是否安全?

2 个答案:

答案 0 :(得分:14)

请参阅PEP 357:允许任何对象用于切片。

  

nb_int方法用于强制,因此意味着什么   与这里要求的根本不同。这个PEP   为可以已经被认为是的东西提出了一种方法   一个整数在需要时将该信息传递给Python   整数。使用nb_int的最大原因是坏的   事实是浮动对象已经定义了nb_int方法,但是   float对象不应该用作序列中的索引。

编辑:它似乎是在Python 2.5中实现的。

答案 1 :(得分:1)

我相信你会在PEP 357中找到答案,其中有这个摘要:

  

此PEP建议添加nb_index   PyNumberMethods中的插槽和   __index__特殊方法,以便可以使用任意对象   每当Python中明确需要整数时,例如在切片中   语法(插槽从中获取名称)。