Python中是否存在对应逻辑运算符and、or的可重写魔术方法?
Python逻辑运算符and/or可重载性说明
Python的逻辑运算符and、or没有对应的可自定义双下划线魔术方法,你提到的需求目前无法直接实现,核心原因如下:
and和or属于短路逻辑运算符,本身是流程控制类语法,而非纯数值/对象运算语法:执行时会先判定左侧表达式的布尔真值,再决定是否执行右侧表达式,运行逻辑和普通双目运算符完全不同,Python官方并未为其设计运算符重载入口。- 你所用到的按位运算符
&、|属于普通双目运算,执行时会同时计算左右两侧的值再做运算,因此支持通过__and__、__or__魔术方法自定义行为。
可行替代方案
如果想要兼顾可读性和功能,可以选择两种常见实现路径:
- 继续使用
&实现自定义逻辑,目前Pandas、SQLAlchemy等主流Python数据/ORM库都采用了类似的设计,用&/|代替逻辑与/或做条件拼接,开发者接受度较高,只需在文档中明确运算符的语境含义即可。 - 给自定义类实现链式调用方法,例如将表达式改为
foo.and_(bar).and_(jar),这种写法的可读性和foo and bar and jar基本一致,且没有语法限制,实现成本也很低。
内容的提问来源于stack exchange,提问作者SwimBikeRun
相关产品推荐
相关产品推荐

