我编写了一个实现__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
答案 0 :(得分:3)
正如hex(..)
文档中指定的那样,您必须定义__index__
方法:
<强>
hex(x)
强>(..)
如果
x
不是Pythonint
对象,则必须定义__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__
返回元组。