在Python中重写not运算符

阿雷克·布尔斯基

我找不到与not x运算符相对应的方法有一个and,or,xor它在哪里?https://docs.python.org/3/reference/datamodel.html

马丁·彼得斯(Martijn Pieters)

没有钩子andor运算符,没有钩子(因为它们短路),并且xorPython中没有运算符。__and____or__是为按位 &|运营商分别。等效的notis的按位运算符~(inversion),它由__invert__方法处理,同时__xor__覆盖了^按位运算符。

not一个对象真值进行运算如果您有容器,请给它一个__len__方法,否则请给它一个__bool__方法请与任一人协商以确定是否应将某个对象视为“真”;not反转该测试的结果。

因此,如果__bool__返回True__len__返回除以外的整数0not则会将其求反False,否则not产生True请注意,not除了布尔值外,您无法返回其他任何值!

从文档中__bool__

__bool__
要求执行真值测试和内置操作bool()应该返回FalseTrue如果未定义此方法,__len__()则调用该方法(如果已定义),并且如果其结果为非零,则认为该对象为true。如果一个类既__len__()没有定义,也没有定义__bool__(),则其所有实例都被视为true。

对于not表达式

在布尔运算的上下文中,以及当控制流语句使用表达式时,以下值将解释为false:False,,None所有类型的数字零以及空字符串和容器(包括字符串,元组,列表,字典,集合和Frozensets)。所有其他值均解释为true。用户定义的对象可以通过提供一种__bool__()方法来自定义其真值

运营商not产生True,如果它的参数是假的,False否则。

大胆强调我的

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章