如何在类

时间:2017-01-11 14:27:15

标签: python python-3.x

我编写了一个实现__int__方法的类,以便实例可以像整数一样:

class MyClass:
    def __init__(self, value):
        self._value = value

    def __int__(self):
        return self._value

在实例上使用int函数工作正常,我认为其他内置函数隐式依赖它,例如hex。但是,我收到以下错误消息:

>>> x = MyClass(5)
>>> int(x)
5
>>> hex(x)
TypeError: 'MyClass' object cannot be interpreted as an integer

我尝试以与__hex__相同的方式实施__int__方法,但这没有效果。

我需要做什么才能让hex

接受我班级的实例?

1 个答案:

答案 0 :(得分:3)

正如hex(..)文档中指定的那样,您必须定义__index__方法:

  

<强> hex(x)

     

(..)

     

如果x不是Python int对象,则必须定义 __index__() 方法,该方法返回整数

(部分省略,格式化)

所以对你的情况来说可能是:

class MyClass:
    def __init__(self, value):
        self._value = value

    def __int__(self):
        return self._value

    def __index__(self):
        return self.__int__() #note you do not have to return the same as __int__

在控制台中运行时:

$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> class MyClass:
...     def __init__(self, value):
...         self._value = value
...     
...     def __int__(self):
...         return self._value
...     
...     def __index__(self):
...         return self.__int__()
... 
>>> foo=MyClass(14)
>>> hex(foo)
'0xe'

如果您想要&#34;值&#34; hex(..)成为别的东西,因此你可以定义__index____int__不同,尽管我强烈建议不要这样做。 hex(..)进一步保证它将返回一个正确格式化的十六进制数字的字符串(str):你不能返回例如元组等。否则它将引发TypeError。例如:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __index__ returned non-int (type tuple)

如果__index__返回元组。