sta*_*tti 18 python operator-overloading object
我发现使用以下构造检查对象是否为"空"非常方便:
l=[]
if l:
do_stuff()
Run Code Online (Sandbox Code Playgroud)
对于标准python列表,if仅当列表不为空时才会执行.
我的问题是,我如何为自己的对象实现相同的想法?
Fre*_*Foo 27
定义方法__bool__(Python 3.x)或__nonzero__(2.x).或者定义两者的可移植性,一个返回另一个的结果.
phi*_*hag 18
实现__nonzero__了Python 2和__bool__Python的3:
class AlwaysTrueObject:
def __bool__(self):
return True
__nonzero__ = __bool__
Run Code Online (Sandbox Code Playgroud)
Das*_*Ich 10
如果你实现__len__Python将为你做这件事,假设长度为0意味着该对象具有布尔值,False并且其具有布尔值True.
如果没有意义实现__len__,你可以实现__nonzero__(或__bool__3.x(只有名称已经改变)),它应该返回True或者False取决于对象的布尔值.