覆盖自定义类的bool()

所有我想要的是为bool(myInstance)返回False(和myInstance评估为False时,如条件,如果/ / /和。我知道如何覆盖>,<,=)

我试过这个:

class test: def __bool__(self): return False myInst = test() print bool(myInst) #prints "True" print myInst.__bool__() #prints "False" 

有什么build议么?

(我正在使用Python 2.6)

6 Solutions collect form web for “覆盖自定义类的bool()”

这是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.__nonzero__()

如果testing是列表式的,则定义len和bool(myInstanceOfTest)将返回True / False,如果有1+或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 

与John La Rooy类似,我使用:

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

[这是对@ 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__ 

这应该工作(不确认)或自己写一个元类:)。

  • 最安全的方法来将浮点数转换为整数在Python中?
  • 在ConfigParser中保存大小写?
  • Python中“in”的关联性?
  • 投下原始stringpython
  • 如何保持Python打印不添加换行符或空格?
  • UnicodeEncodeError:'ascii'编解码器不能编码字符u'\ xa0'在位置20:序号不在范围内(128)
  • 为什么Python在默认编码是ASCII时打印unicode字符?
  • 奇怪的行为与浮动和string转换
  • Pythonexception链接
  • 在Python中,<>是什么意思?
  • 对Python 2.7的支持结束?