观察以下代码:
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/