在Python中,要覆盖"if object:"的运算符是什么?

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).或者定义两者的可移植性,一个返回另一个的结果.

  • `__nonzero__`是Python 2.x,`__ bool__`是Python 3.x. (5认同)

phi*_*hag 18

实现__nonzero__了Python 2和__bool__Python的3:

class AlwaysTrueObject:
    def __bool__(self):
        return True
    __nonzero__ = __bool__
Run Code Online (Sandbox Code Playgroud)

  • `__nonzero__ = __ bool__`具有相同的效果. (3认同)

Das*_*Ich 10

如果你实现__len__Python将为你做这件事,假设长度为0意味着该对象具有布尔值,False并且其具有布尔值True.

如果没有意义实现__len__,你可以实现__nonzero__(或__bool__3.x(只有名称已经改变)),它应该返回True或者False取决于对象的布尔值.