我想要的只是bool(myInstance)返回False(并且在条件中myInstance评估为False,如if /或/和。我知道如何覆盖>,<,=)
我试过这个:
class test:
def __bool__(self):
return False
myInst = test()
print bool(myInst) #prints "True"
print myInst.__bool__() #prints "False"
有什么建议吗?
(我正在使用Python 2.6)
答案 0 :(得分:64)
这是Python 2.x还是Python 3.x?对于Python 2.x,您希望改为覆盖__nonzero__
。
class test:
def __nonzero__(self):
return False
答案 1 :(得分:58)
如果你想让你的代码向前兼容python3,你可以做这样的事情
class test:
def __bool__(self):
return False
__nonzero__=__bool__
答案 2 :(得分:8)
如果您的test
类与列表类似,则定义__len__
,如果有1个项目(非空列表)和{{{},bool(myInstanceOfTest)
将返回True
1}}如果有0项(空列表)。这对我有用。
False
答案 3 :(得分:5)
答案 4 :(得分:2)
与John La Rooy类似,我使用:
class Test(object):
def __bool__(self):
return False
def __nonzero__(self):
return self.__bool__()
答案 5 :(得分:2)
[这是对@ john-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__
哪个应该可以工作(未确认)或自己写一个元类:)。