__and__
- это двоичный (побитовый) оператор &
, а не логический оператор and
.
Поскольку оператор and
является оператором короткого замыкания, его нельзя реализовать как функцию. То есть, если первый аргумент является ложным, второй аргумент вообще не оценивается. Если вы попытаетесь реализовать это как функцию, оба аргумента должны быть оценены до того, как функция может быть вызвана.