运算符在python中重载,运算符右侧的对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了运算符在python中重载,运算符右侧的对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1623字,纯文字阅读大概需要3分钟。
内容图文
我最近在python中了解了运算符重载,我想知道以下是否可行.
考虑下面的hypothetica /设法类.
class My_Num(object):
def __init__(self, val):
self.val = val
def __add__(self, other_num):
if isinstance(other_num, My_Num):
return self.val + other_num.val
else:
return self.val + other_num
我知道上面写的方式,我可以做这样的事情
n1 = My_Num(1)
n2 = My_Num(2)
n3 = 3
print n1 + n2
print n1 + n3
这些将按预期工作.我也知道它目前写的方式我不能这样做
n1 = My_Num(1)
n2 = 2
print 2 + n1
有没有办法解决?我知道这个例子是设计的,但是我有一个应用程序,如果我在运算符重载时,它将非常有用,我定义运算符的类可以出现在运算符的右侧.这在python中可能吗?
解决方法:
是.例如,有__radd__.另外,there are none为__le __(),__ ge __()等,但正如Joel Cornett正确观察到的那样,如果只定义__lt__,则a> b调用b的__lt__函数,它提供了一种解决方法.
>>> class My_Num(object):
... def __init__(self, val):
... self.val = val
... def __radd__(self, other_num):
... if isinstance(other_num, My_Num):
... return self.val + other_num.val
... else:
... return self.val + other_num
...
>>> n1 = My_Num(1)
>>> n2 = 3
>>>
>>> print n2 + n1
4
>>> print n1 + n2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'My_Num' and 'int'
请注意,至少在某些情况下,执行以下操作是合理的:
>>> class My_Num(object):
... def __init__(self, val):
... self.val = val
... def __add__(self, other_num):
... if isinstance(other_num, My_Num):
... return self.val + other_num.val
... else:
... return self.val + other_num
... __radd__ = __add__
内容总结
以上是互联网集市为您收集整理的运算符在python中重载,运算符右侧的对象全部内容,希望文章能够帮你解决运算符在python中重载,运算符右侧的对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。