间隔类 - Python

Hau*_*aus 1 python class intervals

我应该为 Intervals 编写一个类,然后我需要定义加法(如何将两个间隔相加)。我已经这样做了,它的工作原理:

def __add__ (self, other):
    return Interval (self.a + other.a, self.b + other.b) 
Run Code Online (Sandbox Code Playgroud)

其中 a 和 b 是一个区间的终点。

现在我需要修改代码,以便定义间隔和数字c(浮点数或整数)之间的加法。

[a,b] + c = [a+c,b+c] 和

c + [a,b] = [a+c,b+c]。

我尝试了很多不起作用的东西,例如:

def __add__ (self, other, *args):
        if args:
            return Interval (self.a + other.a, self.b + other.b)
        else:
            return  Interval (self.a + int(number), self.b + int(number)) 
Run Code Online (Sandbox Code Playgroud)

无论我尝试什么都行不通。如果你有时间,请看一看,给我一个提示。我真的很感激!

che*_*ner 5

如果要同时定义Interval(a, b) + Interval(c, d)and Interval(a, b) + c(对于某些非Interval类型的c),则需要检查other定义中的参数。

def __add__(self, other):
    if instanceof(other, Interval):
        return Interval(self.a + other.a, self.b + other.b)
    elif instanceof(other, (int, float)):
        return Interval(self.a + other, self.b + other)
    else:
        return NotImplemented
Run Code Online (Sandbox Code Playgroud)

为了支持c + Interval(a, b),您需要定义__radd__

def __radd__(self, other):
    return self + other
Run Code Online (Sandbox Code Playgroud)

如果你是对的3 + Interval(a, b)3.__add__(Interval(a, b))不知道如何处理 an Interval,所以它返回NotImplemented,这是 Python 尝试尝试的提示Interval(a, b).__radd__(3)。的定义__radd__通常不是太复杂,除非你的操作是不可交换的(也就是说,3 + Interval(a, b)Interval(a, b) + 3不相等)。