观察以下代码:

class Angle(int):
    """Basic Angle object: Angle(number)"""

    def __init__(self, angle):
        angle %= 360
        super(Angle, self).__init__(angle)

相当简单的东西,Angle基本上只是一个永不超过360或不小于0的int。此__init__只是确保输入角度与前面列出的条件匹配。但是出于某种原因,以上代码为我提供了以下输出:
>>> a = Angle(322)
>>> a
322
>>> b = Angle(488)
>>> b
488

为什么这会发生呢?该代码对我来说似乎微不足道,但也许我只是错过了一些非常明显的东西。

最佳答案

您应该覆盖intt这样的不可变类的__new__

class Angle(int):
  def __new__(cls, val):
    val %= 360
    inst = super(Angle, cls).__new__(cls, val)
    return inst

有关更多信息,请参见python datamodel

关于python - 看似琐碎的问题在python中调用int的__init__,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21960687/

10-12 21:49