【问题标题】:What is the difference between the __int__ and __index__ methods in Python 3?Python 3 中的 __int__ 和 __index__ 方法有什么区别?
【发布时间】:2010-12-26 06:43:09
【问题描述】:

The Data Model section of the Python 3.2 documentation__int____index__ 方法提供以下描述:

object.__int__(self)

调用以实现内置[函数int()]。应该返回 [一个整数]。

object.__index__(self)

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

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

【问题讨论】:

    标签: python casting


    【解决方案1】:

    相信你会在PEP 357找到答案,里面有这个摘要:

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

    【讨论】:

    • 这并不能解释为什么你不能只使用__int__
    【解决方案2】:

    参见PEP 357:允许使用任何对象进行切片。

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

    编辑:好像是在Python 2.5中实现的。

    【讨论】:

      猜你喜欢
      • 2016-05-12
      • 2016-02-03
      • 2013-10-12
      • 2011-06-22
      • 1970-01-01
      • 2018-12-02
      相关资源
      最近更新 更多