gpt4 book ai didi

python - 在 python 中调用 int 的 __init__ 看似微不足道的问题

转载 作者:太空狗 更新时间:2023-10-30 01:22:31 25 4
gpt4 key购买 nike

观察下面的代码:

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

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

相当简单的东西,Angle 基本上只是一个 int,永远不会超过 360 或低于 0。这个 __init__ 只是确保输入角度符合前面列出的条件。但出于某种原因,上面的代码给了我以下输出:

>>> a = Angle(322)
>>> a
322
>>> b = Angle(488)
>>> b
488

到底为什么会发生这种情况?代码对我来说似乎微不足道,但也许我只是遗漏了一些非常明显的东西。

最佳答案

对于像 int 这样的不可变类,你应该覆盖 __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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com