python - 类集中的“__and__”和“__rand__”有什么区别?
问题描述
我读了 Luciano Ramalho 的《Fluent Python》一书。在 class 的描述中set
,他写道:
s & z # s.__and__(z) - intersection of s and z
z & s # s.__rand__(z) - inversion operator &
我无法理解。为什么在第二种情况下他不写:z.__and__(s)
。作者说:“s和z的交集”!=“取反运算符&”。
是否等于?__and__
___rand__
set()
解决方案
我无法理解。为什么在第二种情况下他不写:
z.__rand__(s)
。
因为这正是反向运算符的重点。__radd__
它们也以等的形式存在__rsub__
。
如果在执行a & b
时调用a.__and__(b)
不存在或返回NotImplemented
,它会尝试(作为“最后的手段”)调用b.__rand__(a)
。
有关详细信息,请参阅Python 文档的相关部分。
在您的示例中,可能 class of z
doesn't implement __and__
,因此它回退到s
which supply __rand__
。
推荐阅读
- java - 我可以将文件放入没有字符串类型的数组列表中吗?
- python - 我正在使用 QSqlDatabase 和 QTableView 来显示一个表,但是 GUI 以某种方式显示一个空表(甚至没有标题)
- c++ - vulkan验证层问题
- amazon-web-services - 使用 PutRecords 将多条记录加载到 Kinesis - 如何在失败的情况下仅重新发送失败的记录?
- javascript - 得到像 Too many re-renders 这样的错误。React 限制渲染次数以防止无限循环
- javascript - 获取 ES6 循环的前一项
- javascript - 如何解析数据类型函数 Array() { [native code] }
- sql - 结合3个SELECT语句输出1个表
- javascript - Cropper.js, PHP/Laravel 上传图片,无需 Ajax
- excel - 如何强制 Excel 用户窗体处于活动/接收窗口