python override di bool () per classe personalizzata




3 Answers

Se vuoi mantenere il tuo codice compatibile con python3, potresti fare qualcosa di simile

class test:
    def __bool__(self):
        return False
    __nonzero__=__bool__
python class casting boolean python-2.x

Questa domanda ha già una risposta qui:

Tutto quello che voglio è che bool (myInstance) restituisca False (e che myInstance valuti su False quando è in un condizionale come se / o / e. So come sovrascrivere>, <, =)

Ho provato questo:

class test:
    def __bool__(self):
        return False

myInst = test()
print bool(myInst) #prints "True"
print myInst.__bool__() #prints "False"

Eventuali suggerimenti?

(Sto usando Python 2.6)







[questo è un commento alla risposta di @ john-la-rooy ma non posso ancora commentare :)]

Per la compatibilità con Python3 puoi farlo (stavo cercando questo)

class test(object):
    def __bool__(self):
        return False

    __nonzero__=__bool__

l'unico problema è che devi ripetere __nonzero__ = __bool__ ogni volta che cambi __bool__ in sottoclassi. Altrimenti __nonzero__ verrà trattenuto dalla superclasse. Puoi provare

from builtins import object  # needs to be installed !

class test(object):
    def __bool__(self):
        return False

    __nonzero__=__bool__

che dovrebbe funzionare (non confermato) o scrivere un metaclass :) te stesso.




Related