[python] jak pretizit oper8tory and, or, not
Radek Kanovsky
rk na dat.cz
Čtvrtek Duben 15 22:22:45 CEST 2004
On Sun, Apr 11, 2004 at 08:50:09PM +0200, Petr Kolesa wrote:
> Ahoj,
>
> potreboval bych pretizit logicke operatory (and, or, xor, not). Presneji
> potrebuju tridu, ktera muze byt uvedena v logicem vyrazu:
>
> (True and moje_instance) xor False
>
>
> Prostrednictvim metod __and__ & spol zatim umim
>
> (True & moje_instance) ^ False
>
> (bitove operatory) ale to neni ono protoze napr. ~False != True.
> Je nejaky zpusob, jak pretizit operatory or, and, etc?
Obavam se, ze pretizit klicova slova and, or a not nelze. Tyto operace
jsou kompilovany na podminene jumpy v bajtkodu. Vyraz ``expr1 and expr2''
nevyvola zadnou specialni metodu ani na jednom z objektu expr1/expr2.
Pokud maji ovsem instance nejake tridy poskytovat urcite pravdivostni
hodnoty, staci definovat ve tride metodu `__nonzero__'. Napr.:
class MojeLogika :
def __init__ (self, i) :
self.i = int(i)
def __nonzero__ (self) :
if self.i > 10 : return True
return False
>>> bool(MojeLogika(-10))
False
>>> bool(MojeLogika(0))
False
>>> bool(MojeLogika(10))
False
>>> bool(MojeLogika(100))
True
>>> bool(MojeLogika(1) and MojeLogika(1))
False
>>> bool(MojeLogika(1) or MojeLogika(1))
False
>>> bool(not MojeLogika(0))
True
>>> bool(not MojeLogika(1))
True
Radek Kaňovský
Další informace o konferenci Python