可以原始“和”被覆盖? 举例来说,如果我尝试做这样的事情覆盖内置“和”
class foo():
def __and__(self,other):
return "bar"
这个被输出
>> foo() and 4
4
>> foo().__and__(4)
'bar'
我的直觉是,内置的,不能被重写,并不能覆盖到不会造成混淆。
我想和功能不应该改变,因为它并不需要是的,因为它的行为就像
def and(self,other):
if(not bool(self)):
return self
else:
return other
你能否给我一个两个操作数都没有被评估的情况?我想不出一个。 – Doboy 2011-03-28 02:47:16
'x = False和foo()'。如果你写'foo()'包含一个'print'语句,你可以很容易地看到它永远不会被调用。如果其中一个操作数为假,那么布尔''和'永远不会成立,所以如果'和'知道第一个操作数是'假',它就不会评估第二个操作数。 '或'是另一种方式:如果第一个操作数是“真”,则不需要评估第二个操作数。这就是所谓的短路,它的副作用有时也是为了他们自己的缘故:例如,如果arg是空的,则arg = arg或default将赋值arg为空,或“无”。 – kindall 2011-03-28 02:52:32