请注意以下代码:
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
为什么这会发生?代码对我来说似乎微不足道,但也许我只是遗漏了一些非常明显的东西.
解决方法
对于像int这样的不可变类,你应该重写__new__
class Angle(int): def __new__(cls,val): val %= 360 inst = super(Angle,cls).__new__(cls,val) return inst
有关详细信息,请参阅python datamodel
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。