Question

    

Cette question a déjà une réponse ici:

         

Tout ce que je veux est pour bool (myInstance) pour retourner Faux (et pour myInstance évaluer False quand dans un conditionnel comme si / et / ou. Je sais comment remplacer>, <, =)

Je l'ai essayé ceci:

class test:
    def __bool__(self):
        return False

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

Toutes les suggestions?

(J'utilise Python 2.6)

Était-ce utile?

La solution

Est-ce 2.x Python ou Python 3.x? Pour Python 2.x vous cherchez à passer outre __nonzero__ à la place.

class test:
    def __nonzero__(self):
        return False

Autres conseils

Si vous voulez garder votre code avant compatible avec python3 vous pourriez faire quelque chose comme ça

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

Si votre classe est test liste semblable, définir __len__ et bool(myInstanceOfTest) retournera True s'il y a des éléments 1+ (liste non vide) et False s'il y a 0 articles (liste vide). Cela a fonctionné pour moi.

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

Tout comme John La Rooy, j'utilise:

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

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

[ceci est un commentaire à la réponse de @ john-la-Rooy, mais je ne peux pas encore de commentaire :)]

Pour la compatibilité python3 que vous pouvez faire (que je cherchais cela)

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

    __nonzero__=__bool__

seul problème est que vous devez répéter la chaque fois que vous changez de __nonzero__ = __bool__ __bool__ dans les sous-classes. Dans le cas contraire __nonzero__ sera conservé de la superclasse. Vous pouvez essayer

from builtins import object  # needs to be installed !

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

    __nonzero__=__bool__

qui devrait fonctionner (non confirmé) ou écrire un métaclasse :) vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top