首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Interval类- Python

Interval类- Python
EN

Stack Overflow用户
提问于 2019-12-06 15:12:59
回答 2查看 1.2K关注 0票数 1

我应该编写一个间隔期类,然后需要定义加法(如何将两个间隔相加)。我做过这件事,效果很好:

代码语言:javascript
复制
def __add__ (self, other):
    return Interval (self.a + other.a, self.b + other.b) 

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

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

a,b+c = a+c,b+c和

C+ a,b= a+c,b+c。

我尝试过很多不起作用的东西,比如:

代码语言:javascript
复制
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)) 

不管我做什么都没用。如果你有时间,请看一看,给我一个提示。我真的很感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-06 15:25:53

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
def __radd__(self, other):
    return self + other

如果您正确地使用3 + Interval(a, b)3.__add__(Interval(a, b))不知道如何处理Interval,因此它返回NotImplemented,这是Python尝试Interval(a, b).__radd__(3)的提示。__radd__的定义通常并不太复杂,除非您的操作不是可交换的(也就是说,3 + Interval(a, b)Interval(a, b) + 3并不相等)。

票数 5
EN

Stack Overflow用户

发布于 2019-12-06 15:23:52

您可以假设other已经是一个Interval,并尝试添加,但如果不是,则会捕获一个异常:

代码语言:javascript
复制
def __add__ (self, other):
    try:
        return Interval (self.a + other.a, self.b + other.b)
    except AttributeError:
        pass
    return  Interval (self.a + int(other), self.b + int(other))

如果要计算42 + x,则需要radd方法:

代码语言:javascript
复制
    def __radd__(self, other):
        return self + other
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59215736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档