在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是没有意义的。