Python “的区别是什么?”__以及";及__兰特;在课堂上?
我读了卢西亚诺·拉马略的《流畅的Python》一书。在对classPython “的区别是什么?”__以及";及__兰特;在课堂上?,python,python-3.x,set,Python,Python 3.x,Set,我读了卢西亚诺·拉马略的《流畅的Python》一书。在对classset的描述中,他写道: s & z # s.__and__(z) - intersection of s and z z & s # s.__rand__(z) - inversion operator & 我不明白。为什么在第二种情况下他不写:z.\uuu和(s)。作者说:“s和z的交点”!=“反转运算符&” \u和和\uu和是否等于集合() 我不明白。为什么在第二种情况下他不写: z
set
的描述中,他写道:
s & z # s.__and__(z) - intersection of s and z
z & s # s.__rand__(z) - inversion operator &
我不明白。为什么在第二种情况下他不写:z.\uuu和(s)
。作者说:“s和z的交点”!=“反转运算符&”
\u和
和\uu和
是否等于集合()
我不明白。为什么在第二种情况下他不写:
z.\uuuu rand\uuuu(s)
因为这正是反向运算符的要点。它们也以\uuuu radd\uuuu
和\uuuu rsub\uuuu
等形式存在
如果在执行a&b
时,调用a.\uu和
不存在或返回NotImplemented
,它会尝试(作为“最后手段”)调用b.\uu和
有关详细信息,请参阅
在您的示例中,
z
类可能没有实现\uu和
,因此它返回到提供\uu和
的s
,假设作者特别试图解释s
的方法,而不是z
的方法,第二个示例使用s.\uuu rand\uuuu
,因为s
位于&
操作符的右侧。如果z
没有\uu和
方法,或者它返回NotImplemented
,那么并且只有那时才调用s.\uu rand\uuz
(除了在这种情况下可能根本不会调用它,因为set
是用C编写的内部类型)。