我想创建一个可以设置最大值和/或最小值的数字。所以它的工作原理如下:
>>> n = myNum(5, minimum=0, maximum=10)
>>> n += 10
>>> print(n)
10
>>> n = myNum(-12, minimum=3)
>>> print(n)
3
问题在于,尽管事实上它看起来像是一个简单的概念,但我试图实现它似乎变得非常乏味和长久。有没有一种优雅的方式来做到这一点,而不是,例如,重写与数字有关的每一种神奇方法?
答案 0 :(得分:1)
你应该做那样的事情
n = min(max(5,10),0)
和
n = min(-12,3)
根据您的评论,您可以提供方便的功能:
def between_min_max(value, min_val, max_val):
return min(max(value, max_val), min_val)
稍后在代码中使用它:
min_val = 0
max_val = 10
n = between_min_max(5,min_val,max_val)
# and you can reuse min_val, max_val later
答案 1 :(得分:0)
这可能有点矫枉过正。您可以尝试创建自己的类,然后在类上重载运算符。您可以创建课程mynum
:
class mynum:
def __init__ (self, val, minval, maxval):
self.val = val
self.minval = minval
self.maxval = maxval
并在代码中将您的号码声明为mynum
的实例:
n = mynum(5, 0, 10) # for instance
然后,您可以重载类上的运算符,以使其行为符合您的要求。要添加,请将其放在mynum
类定义中:
def __add__(self, operand): # overload things like n + 10
self.val += operand
if self.val > self.maxval: # replace checks with max(min(...)...) if you like
self.val = self.maxval
elif self.val < self.minval:
self.val = self.minval
return self.val
This post有一些关于起点的好信息。不好的一面是,这种方法需要重载每个可能为您的mynum
实例提供无效值的运算符。