Python:特定类型的运算符重载
我想让我的类的操作符可以和普通类型以我定义的方式进行互动。比如说,我有:
class Mynum(object):
def __init__(self, x):
self.x = x
def __add__(self, other):
return self.x + other.x
a = Mynum(1)
b = Mynum(2)
print a+b
这段代码运行得很好,但如果我尝试这样做:
print a+2
我就会遇到错误,因为一个 int
类型并没有一个叫 x
的成员。那我该如何在类中定义 Mynum
和 int
的相加呢?这听起来像是装饰器或 metaclass 的工作,但我对它们的用法非常不熟悉。这个问题 看起来类似,但并不完全相同。
3 个回答
为什么要使用额外的切换和/或异常处理呢?使用下面的方式会更简单:
class MyNum(object):
def __init__(self, x):
self.x = x
def __add__(self, other):
return other + self.x
__radd__ = __add__
x = MyNum(5)
y = MyNum(6)
print x + 2
7
print 2 + x
7
print x + y
11
print y + x
11
这段代码是用来处理一些数据的。它的主要目的是从一个地方获取信息,然后对这些信息进行一些操作,最后把结果返回给我们。
首先,代码会连接到一个数据库,这就像打开一个文件夹,里面存放着我们需要的数据。接着,它会查询这个数据库,找出我们想要的信息。这一步就像在文件夹里翻找特定的文件。
找到信息后,代码会对这些数据进行处理,比如进行计算或者格式化。想象一下,你找到了一些数字,现在你需要对它们进行加减乘除的运算。
最后,处理完的数据会被返回给我们,可能是以列表的形式呈现。就像把整理好的文件放回文件夹,方便我们随时查看。
总的来说,这段代码的工作流程就是:连接数据库 -> 查询数据 -> 处理数据 -> 返回结果。
class Mynum(object):
def __init__(self, x):
self.x = x
def __add__(self, other):
try:
return self.x + other.x
except AttributeError:
return self.x + other
__radd__=__add__
a = Mynum(1)
b = Mynum(2)
print(a+b)
# 3
print(a+2)
# 3
print(2+a)
# 3
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,特别是当我们不太了解这些工具的工作原理时。
比如说,有人可能在使用一个特定的库时,发现它的某个功能没有按照预期工作。这时候,他们可能会去网上寻找解决方案,像在StackOverflow这样的平台上提问。
在提问时,提供清晰的信息是非常重要的。比如,描述你遇到的问题,提供相关的代码示例,以及你尝试过的解决办法。这些信息可以帮助其他人更好地理解你的问题,从而给出有效的建议。
总之,遇到问题时,不要害怕寻求帮助,记得把问题描述清楚,这样才能更快找到解决方案。
def __add__(self, other):
if isinstance(other, self.__class__):
return self.x + other.x
elif isinstance(other, int):
return self.x + other
else:
raise TypeError("unsupported operand type(s) for +: '{}' and '{}'").format(self.__class__, type(other))