在Python中,要为“重写”重写哪个运算符;if object:“;?

在Python中,要为“重写”重写哪个运算符;if object:“;?,python,object,operator-overloading,Python,Object,Operator Overloading,我发现使用以下构造检查对象是否为“空”非常方便: l=[] if l: do_stuff() 对于标准python列表,仅当列表不为空时才会执行if 我的问题是,如何为我自己的对象实现相同的想法?定义一个方法\uuubool\uuuu(Python3.x)或\uuu nonzero\uuuu(2.x)。或者为可移植性定义两者,其中一个返回另一个的结果。为Python 2和Python 3实现: class AlwaysTrueObject: def __bool__(self

我发现使用以下构造检查对象是否为“空”非常方便:

l=[]
if l:
     do_stuff()
对于标准python列表,仅当列表不为空时才会执行
if


我的问题是,如何为我自己的对象实现相同的想法?

定义一个方法
\uuubool\uuuu
(Python3.x)或
\uuu nonzero\uuuu
(2.x)。或者为可移植性定义两者,其中一个返回另一个的结果。

为Python 2和Python 3实现:

class AlwaysTrueObject:
    def __bool__(self):
        return True
    __nonzero__ = __bool__

如果您实现
\uuu len\uuuu
Python将为您实现这一点,前提是长度为0意味着对象的布尔值为
False
,否则它的布尔值为
True


如果在3.x中实现
\uuuu len\uuuuu
没有意义,您可以实现
\uuu非零
(或
\uuuuu bool\uuuuu
在3.x中(只有名称已更改)),它应该根据对象的布尔值返回
True
False

谢谢!两者之间有区别吗?我相信
\uuubool\uuu
是后来添加的。它们应该执行相同的操作,通过一个调用另一个来定义两者应该是安全的。
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>是Python 2.x,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。我想
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。我同意,如果len已经在那里并完成了任务,那么实施bool是没有意义的。