对象无法被解释为整数。

3
我有一个库,其中的函数曾经返回一个整数,但现在将返回我定义的“field”类的对象。我希望这个类的行为尽可能接近整数,以保持与使用此库的脚本的兼容性,尽管我不能扩展int类型,因为值需要是可变的。所以我定义了__int__(),__add__(),__radd__()等方法,希望没有人会注意到函数不再返回常规整数。然而,这并没有像我计划的那样进行,因为几个内置函数现在会引发“TypeError: 'field' object cannot be interpreted as an integer”错误(例如hex())。是否有什么办法可以解决这个问题,使我的类可以被“解释为整数”?
对于任何想知道为什么需要这种改变的人,我提到的函数是另一个类(“block”)的__getitem__()函数,该类表示这些“fields”的集合。 "block"对象用作eval()的locals参数来评估诸如field1 + field2之类的表达式,我希望能够在这些表达式中使用字段的其他属性。

1
尝试在你的field类中添加一个__index__(self)方法。 - martineau
可以的!谢谢,回答一下我会接受它。 - pc3e
顺便说一句,虽然现在可能为时已晚,但根据Python代码风格指南(PEP 8)的规定,类名应以大写字母开头,例如FieldBlock - martineau
1个回答

6

添加一个__index__(self)方法,并返回你的field类中包含的int(或long)值,这将使它能够被Python内置函数接受。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接