bool remplaçant () pour la classe personnalisée [dupliquer]
-
19-09-2019 - |
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)
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.