【发布时间】: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,惯例是以大写字母开头的类命名。即
Field和Block。
标签: python python-3.x