小编典典

在python中定义类的“布尔”

python

为什么不像天真的预期那样起作用?

class Foo(object):
    def __init__(self):
        self.bar = 3
    def __bool__(self):
        return self.bar > 10

foo = Foo()

if foo:
    print 'x'
else:
    print 'y'

(输出为x


阅读 170

收藏
2020-12-20

共1个答案

小编典典

为了与Python 2-3兼容,只需将其添加到示例中:

Foo.__nonzero__ = Foo.__bool__

或将Foo的原始定义扩展为包括:

__nonzero__ = __bool__

当然,您也可以反过来定义它们,方法名称在哪里,__nonzero__然后将其分配给__bool__,但是我认为该名称__nonzero__只是Python根据其与对象的等价性将对象解释为真或假的原始C-
ishness的遗产。零。只需添加上面的语句,您的代码即可在Python 2.x上运行,并且在升级到Python
3.x后(最终将其分配到__nonzero__)自动运行。

2020-12-20