Domanda

    

Questa domanda ha già una risposta qui:

         

Tutto quello che voglio è per bool (myInstance) per restituire False (e per myInstance valutare False quando in una condizione come se / o / e. So come ignorare>, <, =)

Ho provato questo:

class test:
    def __bool__(self):
        return False

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

Qualche suggerimento?

(sto usando Python 2.6)

È stato utile?

Soluzione

E 'questo 2.x Python o Python 3.x? Per Python 2.x si sta cercando di ignorare __nonzero__ invece.

class test:
    def __nonzero__(self):
        return False

Altri suggerimenti

Se si desidera mantenere il vostro codice in avanti compatibile con python3 si potrebbe fare qualcosa di simile

class test:
    def __bool__(self):
        return False
    __nonzero__=__bool__

Se la classe è test lista simile, definire __len__ e bool(myInstanceOfTest) tornerà True se ci sono elementi 1+ (lista non vuota) e False se ci sono 0 prodotti (elenco vuoto). Questo ha funzionato per me.

class MinPriorityQueue(object):
    def __init__(self, iterable):
        self.priorityQueue = heapq.heapify(iterable)
    def __len__(self):
        return len(self.priorityQueue)

>>> bool(MinPriorityQueue([])
False
>>> bool(MinPriorityQueue([1,3,2])
True

Simile a John La Rooy, io uso:

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

    def __nonzero__(self):
        return self.__bool__()

[Questo è un commento alla risposta da @ john-la-Rooy, ma non posso commentare ancora :)]

Per python3 compatibilità si può fare (ero alla ricerca di questo)

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

    __nonzero__=__bool__

unico problema è che è necessario ripetere l'everytime __nonzero__ = __bool__ si cambia __bool__ nelle sottoclassi. In caso contrario __nonzero__ sarà tenuto dalla superclasse. Si può provare

from builtins import object  # needs to be installed !

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

    __nonzero__=__bool__

che dovrebbe funzionare (non confermata) o scrivere una metaclasse :) te stesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top