【问题标题】:"object cannot be interpreted as an integer"“对象不能解释为整数”
【发布时间】:2013-06-27 12:15:50
【问题描述】:

我有一个库,其中包含一个用于返回整数的函数,但现在将返回我定义的“字段”类的对象。我希望这个类的行为尽可能接近整数,以保持与使用该库的脚本的兼容性,尽管我无法扩展 int,因为该值需要是可变的。所以我定义了__int__()__add__()__radd__()等等,希望没人会注意到函数不再返回一个常规整数。然而,这并没有像我计划的那样发生,因为几个内置函数现在会引发“TypeError:'field' object cannot be mapped as an integer”。 (例如hex()。)对此我能做些什么,以便我的类可以被“解释为整数”?

对于任何想知道为什么需要进行此更改的人,我提到的函数是另一个类(“块”)的__getitem__() 函数,它表示这些“字段”的集合。 “block”的对象用作eval()locals 参数来评估field1 + field2 等表达式,我希望可以在这些表达式中使用字段的其他属性。

【问题讨论】:

  • 尝试在field 类中添加一个__index__(self) 方法。
  • 行得通!谢谢,添加一个答案,我会接受它。
  • FWIW,虽然这样做可能为时已晚,但根据PEP 8 - Style Guide for Python Code,惯例是以大写字母开头的类命名。即FieldBlock

标签: python python-3.x


【解决方案1】:

添加一个__index__(self) 方法并返回包含在field 类中的int(或long)值应该可以让Python 的许多内置函数接受它。

【讨论】:

    猜你喜欢
    • 2018-03-19
    • 2018-01-19
    • 1970-01-01
    • 2017-08-01
    • 2018-05-15
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多