我找不到与not x
运算符对应的方法。有一个and,or,xor
tho。它在哪里?
https://docs.python.org/3/reference/datamodel.html
答案 0 :(得分:7)
and
或or
运算符没有挂钩,没有(因为它们短路),并且Python中没有xor
运算符。 __and__
和__or__
分别用于bitwise &
and |
operators。 not
的等效按位运算符为~
(反转),由__invert__
method处理,而__xor__
覆盖^
按位运算符。
not
对truth-value of an object进行操作。如果您有容器,请给它__len__
method,如果没有给它__bool__
method。咨询任何一方以确定是否应该考虑对象' true&#39 ;; not
会反转该测试的结果。
因此,如果__bool__
返回True
或__len__
返回0
以外的整数,not
会将其反转为False
,否则{ {1}}生成not
。请注意,除了布尔值之外,您无法使True
返回任何其他内容!
来自not
的文档:
__bool__
被称为实施真值测试和内置操作__bool__
;应该返回bool()
或False
。如果未定义此方法,则调用True
(如果已定义),如果对象的结果非零,则认为该对象为true。如果某个类既未定义__len__()
也未定义__len__()
,则其所有实例都被视为true。>
在布尔运算的上下文中,以及控制流语句使用表达式时,以下值被解释为false:
__bool__()
,False
,所有类型的数字零和空字符串和容器(包括字符串,元组,列表,字典,集合和frozensets)。所有其他值都被解释为true。 用户定义的对象可以通过提供None
方法来自定义其真值。如果参数为假,则
__bool__()
运算符not
,否则为True
。
大胆强调我的。
答案 1 :(得分:3)
and,or,xor
tho
您正在查看的方法是按位 &
,|
和^
,而不是and
,{{1} },或or
(甚至不是Python运算符)。
xor
无法重载,就像not
和and
无法重载一样。但是,按位or
可能会过载;这是~
。
如果您希望自己可以超载__invert__
,那么您将不得不替代重载not
,或者您必须编写自己的~
logical_not
1}}功能并使用它而不是not
运算符。