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

在Python中如何将兔子添加到数字中?,python,magic-methods,Python,Magic Methods,我可以向Rabbit类添加一个数字,但反过来不行: 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.a

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

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))
最后一行返回:

TypeError: unsupported operand type(s) for +: 'int' and 'Rabbit'
这是因为在第一个打印表达式(有效)中,
Rabbit.\uuuuu add\uuuuu
被称为underground,而在第二个表达式中,
int.\uuuuu add\uuuuu
被称为underground,并且
int.\uuuuu add\uuuu
方法对兔子不起作用。什么是最好的方式使这项工作?我希望能够将Int添加到兔子,并将兔子添加到Int。

有关的文档,以下是您需要的:

  • 方法
    \uuuuu add\uuuuuu
    是当左实例来自类时,在这里处理右实例,右实例可以来自类或其他

  • 方法
    \uuuu radd\uuuu
    是当右边的实例不是来自类,而左边的实例是,您在这里

你需要

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'