作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
观察下面的代码:
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/
什么时候 lambda a 可以保证是微不足道的,如果有的话? 我假设如果它只捕获普通类型或什么都不捕获,那将是微不足道的。不过,我没有任何标准语言来支持这一点。 我的动机是将一些代码从 Visual
看似微不足道,但找不到解决方案 - 我需要编写查询,根据属性值获取人员(例如,让我找到具有属性“1”和“2”和“3”的人) *澄清:可以对三个以上的属性值进行查询- 它将由用户选择 - 从 0 到 n
我是一名优秀的程序员,十分优秀!