我可以在 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.__add__
被称为地下,而在第二个表达式中 int.__add__
被称为 int.__add__
方法不适用于兔子。完成这项工作的最佳方法是什么?我希望能够将整数添加到兔子和兔子到整数。
最佳答案
关于 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'
关于python - 如何在 Python 中将兔子添加到数字中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61608947/