实现具有可选最小值或最大值的数字的最佳方法是什么?

时间:2015-07-19 23:04:43

标签: python

我想创建一个可以设置最大值和/或最小值的数字。所以它的工作原理如下:

>>> n = myNum(5, minimum=0, maximum=10)
>>> n += 10
>>> print(n)
10
>>> n = myNum(-12, minimum=3)
>>> print(n)
3

问题在于,尽管事实上它看起来像是一个简单的概念,但我试图实现它似乎变得非常乏味和长久。有没有一种优雅的方式来做到这一点,而不是,例如,重写与数字有关的每一种神奇方法?

2 个答案:

答案 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实例提供无效值的运算符。