如何将兔子添加到 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'
我可以给 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'