How to make an integer larger than any other integer? How to make an integer larger than any other integer? python python

How to make an integer larger than any other integer?


Since python integers are unbounded, you have to do this with a custom class:

import functools@functools.total_orderingclass NeverSmaller(object):    def __le__(self, other):        return Falseclass ReallyMaxInt(NeverSmaller, int):    def __repr__(self):        return 'ReallyMaxInt()'

Here I've used a mix-in class NeverSmaller rather than direct decoration of ReallyMaxInt, because on Python 3 the action of functools.total_ordering would have been prevented by existing ordering methods inherited from int.

Usage demo:

>>> N = ReallyMaxInt()>>> N > sys.maxsizeTrue>>> isinstance(N, int)True>>> sorted([1, N, 0, 9999, sys.maxsize])[0, 1, 9999, 9223372036854775807, ReallyMaxInt()]

Note that in python2, sys.maxint + 1 is bigger than sys.maxint, so you can't rely on that.

Disclaimer: This is an integer in the OO sense, it is not an integer in the mathematical sense. Consequently, arithmetic operations inherited from the parent class int may not behave sensibly. If this causes any issues for your intended use case, then they can be disabled by implementing __add__ and friends to just error out.


Konsta Vesterinen's infinity.Infinity would work (pypi), except that it doesn't inherit from int, but you can subclass it:

from infinity import Infinityclass IntInfinity(Infinity, int):    passassert isinstance(IntInfinity(), int)assert IntInfinity() > 1e100

Another package that implements "infinity" values is Extremes, which was salvaged from the rejected PEP 326; again, you'd need to subclass from extremes.Max and int.


Use case: library function expects an integer, and the only easy way to force a certain behavior is to pass a very large integer.

This sounds like a flaw in the library that should be fixed in its interface. Then all its users would benefit. What library is it?

Creating a magical int subclass with overridden comparison operators might work for you. It's brittle, though; you never know what the library is going to do with that object. Suppose it converts it to a string. What should happen? And data is naturally used in different ways as a library evolves; you may update the library one day to find that your trick doesn't work anymore.