如何将兔子添加到 Python 中的数字?

How do I add a rabbit to a number in Python?

我可以给 Rabbit 添加一个数字 class,但反过来不行:

class Rabbit:

    def __init__(self, age):
        self.age = age

    def __add__(self, rabbit):
        if isinstance(rabbit, int):
            return self.age + rabbit
        else:
            return self.age + rabbit.age

print(Rabbit(10) + 5)
print(5 + Rabbit(10))

最后一行returns:

TypeError: unsupported operand type(s) for +: 'int' and 'Rabbit'

那是因为在第一个打印表达式(有效)中调用了地下 Rabbit.__add__,而在第二个表达式中调用了 int.__add__ 并且 int.__add__ 方法不适用于兔子。完成这项工作的最佳方法是什么?我希望能够将整数添加到兔子和兔子到整数。

有关 Emulating numeric types 的文档,这是您需要的:

  • 方法__add__是当左边的实例来自class时,在这里你处理右边的实例,它可以来自class或其他

  • 方法__radd__是当右边的实例不是来自class而左边的实例是,你在这里

你需要

def __radd__(self, value):
    if isinstance(value, int):
        return self.age + value
    print("Other type", type(value)) # handle non-int as you want

给予

print(Rabbit(10) + 5)         # add 15
print(Rabbit(10) + Rabbit(5)) # add 15
print(5 + Rabbit(10))         # radd 15
print(5.2 + Rabbit(10))       # radd 'Other type float'