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__
进行别名是否安全?
答案 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中明确需要整数时,例如在切片中 语法(插槽从中获取名称)。