溢出错误:Python int太大,无法转换为C long

溢出错误:Python int太大,无法转换为C long,python,Python,我有这门课: class MetricInt(int): """Int wrapper that adds only during the observation window.""" def __new__(cls, _, initial): return int.__new__(cls, initial) def __init__(self, sim, initial): int.__init__(initial) s

我有这门课:

class MetricInt(int):
    """Int wrapper that adds only during the observation window."""
    def __new__(cls, _, initial):
        return int.__new__(cls, initial)

    def __init__(self, sim, initial):
        int.__init__(initial)
        self.sim = sim

    def __add__(self, val):
        if self.sim.in_observe_window():
            self = MetricInt(self.sim, super(MetricInt, self).__add__(int(val)))
        return self
这基本上覆盖了
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

但是,如果初始值太大,我有:

溢出错误:Python int太大,无法转换为C long


什么是正确的方法来做我正在尝试做的事情并处理大数字?

我解决了一个类似的问题,将它转换为int和int(bigNumber),但我认为这在您的情况下是微不足道的。 您可以尝试使用numpy:

numpy.int32(Your big number)
我在某个地方找到了这些,现在我记不得了:

def int_overflow(val):
  if not -sys.maxint-1 <= val <= sys.maxint:
    val = (val + (sys.maxint + 1)) % (2 * (sys.maxint + 1)) - sys.maxint - 1
  return val
def int_溢出(val):

如果不是-sys.maxint-1您是否使用Python 2.6?您可以尝试子类化
long

但总的来说,我强烈建议不要将Python内置类型子类化;CPython保留跳过对此类类型的特殊方法的调用的权利,例如,不会对
str
的子类调用
\uuuuuuuu
。这里的示例是有效的,但您可能会询问bug


考虑授权,并授权您想要的操作员。(当然,你也可能想要
\uuuu int\uuuu

我喜欢Eevee关于授权的回答。他没有提供任何代码,所以我正在这样做:

class MetricInt(object):
    """Int wrapper that adds only during the observation window."""
    def __init__(self, sim, initial):
        self.sim = sim
        self.val = int(initial)

    def __add__(self, val):
        if self.sim.in_observe_window():
            self.val += int(val)
        return self

    def __int__(self):
        return self.val

    def __float__(self):
        return float(self.val)

这样,问题就解决了。当我决定对
int
类型进行子类化时,这是因为我的代码中已经有一些
int
变量,不想对代码做太多更改。但是,如果我定义了
\uuuu int\uuu
\uu float\uuu
,我只需要向
int
添加一些强制转换。我想如果它能避免奇怪的bug,那也没那么糟糕。

我对Python 2.7有问题,但我需要我的代码与Python2和Python3兼容。你能解释一下该函数是如何工作的以及为什么工作的吗?