3

我正在查看另一个实现的问题的答案if not self:中的片段。__nonzero__()

这让我想知道:除了__nonzero__()返回False或琐碎的局部赋值之外self = None,还有其他情况,其中条件if not self为真?

4

1 回答 1

2

根据 Python 的真值测试文档:

可以测试任何对象的真值,用于iforwhile 条件或作为以下布尔运算的操作数。

默认情况下,一个对象被认为是真,除非它的类定义了一个__bool__()返回的方法False或一个__len__()返回零的方法,当与该对象一起调用时。

在您引用的代码中,__nonzero__()Python 2 相当于 Python 3 的__bool__().

因此,您问题中方法的替代__bool__()方法可能是:

class Lenny:

    def __len__(self):
        return 0 if self.value == '#' else len(self.children)

注意:这些都与您的问题标题无关:“何时可以自我 == 无”。平等(无论是否平等None)是与真值不同的概念,由以下__eq__()方法定义:

class Nonelike:

    def __eq__(self, other):
        return other == None
于 2017-12-17T23:12:45.853 回答