python - 如何在 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。完成这项工作的最佳方法是什么?我希望能够将整数添加到兔子和兔子到整数。
解决方案
关于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'
推荐阅读
- node.js - 猫鼬吸气剂不适用于数组
- powerbi - 如何从 Range 中获取值?- 电源BI
- reactjs - 如何将反应 DnD 与反应全日历集成?
- structure - 结构中字段的大小
- angular - 同一页面中的多个角度元素通过延迟加载共享相同的服务
- android - dexing 时如何查找错误原因:MethodHandle.invoke 和 MethodHandle.invokeExact
- python - 使用 teradata python 模块连接到 Teradata 时出现问题
- php - 检查 Woocommerce 3 中的购物车是否为空
- python - 从python中的句子中提取单词
- bash - 如何在 Bash Scripting 中以更好的方式执行命名命令行参数?