如果你需要一個新的(快速和骯髒的)班,我會實現它作爲如下。
class SaturatedInteger:
def __init__(self, val, lo, hi):
self.real, self.lo, self.hi = val, lo, hi
def __add__(self, other):
return min(self.real + other.real, self.hi)
def __sub__(self, other):
return max(self.real - other.real, self.lo)
...
你覺得你需要(和他們的「r
」變種)添加爲許多其他運營商的the docs。
通過實例名稱real
存儲的值,你可以用普通的整數做你的算術,花車等太:
a = SaturatedInteger(60, 0, 100)
print(a)
60
print(a+30)
90
print(a+40)
100
print(a+50.)
100
print(a-70.)
0
print(a+a)
100
雖然,你當然只有當你添加的實部給你的SaturatedInteger
增加一個複數,所以要小心。 (對於一個更加完整和強大的版本,@ jonrsharpe的答案是要走的路)。
來源
2015-05-12 17:33:25
xnx
查看https://docs.python.org/2/reference/datamodel.html#emulating-numeric-types – jonrsharpe
我只是好奇而已:像夾具一樣飽和(我在OpenGL中看到的一個術語)? –
@DavidEhrmann夾緊是當範圍是通過一個單獨的步驟固定用的術語,而飽和是在操作本身期間施加限制。兩者的結果應該完全相同。 –