注意:虽然接受的答案达到了我想要的结果,@ecatmur answer提供了一个更全面的选项,但我觉得首先强调我的用例是一个坏主意是非常重要的。这在@Jason Orendorff answer below中解释得很好。
注意:这个问题不是the question about ^{sys.maxint
无关;即使在有sys.maxint
可用的python 2中,它也不表示最大整数(请参阅接受的答案)。
我需要创建一个比任何其他整数都大的整数,这意味着与使用>
的任何其他int
对象相比,返回True
的int
对象。用例:库函数需要一个整数,强制某个行为的唯一简单方法是传递一个非常大的整数。
在python 2中,我可以使用sys.maxint
(编辑:我错了)。在python 3中,math.inf
是最接近的等价物,但我不能将其转换为int
。
Konsta Vesterinen的^{} 可以工作(pypi),只是它不是从
int
继承的,但是您可以将其子类化:另一个实现“无限”值的包是Extremes,它是从被拒绝的PEP 326中获得的;同样,您需要从
extremes.Max
和int
中进行子类划分。这听起来像库中的一个缺陷,应该在其接口中修复。那么它的所有用户都会受益。它是什么图书馆?
使用重写的比较运算符创建神奇的int子类可能对您有用。不过,它很脆弱;你永远不知道图书馆会用那个东西做什么。假设它将其转换为字符串。会发生什么?随着库的发展,数据自然会以不同的方式使用;有一天,你可能会更新库,发现你的诀窍已经失效。
由于python整数是无限的,因此必须使用自定义类:
这里我使用了类
NeverSmaller
中的mix,而不是ReallyMaxInt
的直接修饰,因为在Python 3上,functools.total_ordering
的操作会被继承自int
的现有排序方法阻止。使用演示:
注意,在python2中,
sys.maxint + 1
比sys.maxint
大,所以不能依赖它。免责声明:这是OO意义上的整数,不是数学意义上的整数。因此,继承自父类
int
的算术运算可能表现不合理。如果这对您的预期用例造成了任何问题,那么可以通过实现__add__
来禁用它们,而friends只需出错。相关问题 更多 >
编程相关推荐