在python中定义类的“布尔”

发布于 2021-01-29 19:24:51

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

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

关注者
0
被浏览
49
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    Foo.__nonzero__ = Foo.__bool__
    

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

    __nonzero__ = __bool__
    

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看