首页 > 解决方案 > 如何在 Python 中将兔子添加到数字中?

问题描述

我可以向 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'

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

标签: pythonmagic-methods

解决方案


关于Emulating numeric types和这里的文档是你需要的:

  • 该方法__add__是当左实例来自类时,在这里您处理可以来自类或其他的右实例

  • 该方法__radd__是当右边的实例不是来自类但左边的实例是时,你在这里

你需要

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'

推荐阅读