这个问题已经在这里有一个答案:
- 定义一个类的“boolness”在Python 3个回答
所有我想要的是布尔(将myInstance)返回false(和将myInstance评估为False时,在条件一样,如果/或/和。我知道如何重写>,<,=)
我已经试过这样:
class test:
def __bool__(self):
return False
myInst = test()
print bool(myInst) #prints "True"
print myInst.__bool__() #prints "False"
有什么建议?
(我使用Python 2.6)
这是Python的2.x或Python的3.x的? 对于Python 2.x的你正在寻找替代__nonzero__
代替。
class test:
def __nonzero__(self):
return False
如果你想保持你的代码期待与python3兼容,你可以做这样的事情
class test:
def __bool__(self):
return False
__nonzero__=__bool__
如果你的test
类列表类似,定义__len__
和bool(myInstanceOfTest)
将返回True
如果有1+项目(非空列表)和False
,如果有0项(空单)。 这为我工作。
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
类似约翰·拉ROOY,我使用:
class Test(object):
def __bool__(self):
return False
def __nonzero__(self):
return self.__bool__()
[这是从@约翰-LA-ROOY答案评论,但我不能评论尚未:)]
对于Python3兼容,你可以做(我一直在寻找这一点)
class test(object):
def __bool__(self):
return False
__nonzero__=__bool__
唯一的问题是,你需要重复__nonzero__ = __bool__
每次你改变__bool__
的子类。 否则__nonzero__
将从超保持。 你可以试试
from builtins import object # needs to be installed !
class test(object):
def __bool__(self):
return False
__nonzero__=__bool__
这应该工作(未证实)或写元类:)自己。