我正在查看an answer to another question中实现if not self:
的代码段__nonzero__()
。
这让我感到疑惑:除了__nonzero__()
返回False
或琐碎的本地作业self = None
之外,还有其他情况,其中条件if not self
是真的吗? / p>
答案 0 :(得分:2)
根据Python关于truth value testing的文档:
可以测试任何对象的真值,以便在
if
或while
中使用 条件或下面布尔运算的操作数。默认情况下,除非其类定义,否则将对象视为true 返回
False
或__bool__()
方法的__len__()
方法 当用对象调用时返回零。
在您引用的代码中,__nonzero__()
是Python 2的等效于Python 3的__bool__()
。
因此,您问题中__bool__()
方法的替代方法可能类似于:
class Lenny:
def __len__(self):
return 0 if self.value == '#' else len(self.children)
注意:这些与您的问题标题没有任何关系:“何时可以自我==无”。 Equality (无论是None
还是其他任何内容)是与真值不同的概念,由__eq__()
方法定义:
class Nonelike:
def __eq__(self, other):
return other == None