首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中定义类的"boolness“

在python中定义类的"boolness“
EN

Stack Overflow用户
提问于 2011-11-21 07:09:25
回答 3查看 15.2K关注 0票数 77

为什么这并不像人们天真地期望的那样工作呢?

代码语言:javascript
复制
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)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-21 09:24:54

为了与Python 2-3兼容,只需在示例中添加以下内容:

代码语言:javascript
复制
Foo.__nonzero__ = Foo.__bool__

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

代码语言:javascript
复制
__nonzero__ = __bool__

当然,您也可以反向定义它们,方法名为__nonzero__并将其赋值给__bool__,但我认为__nonzero__这个名称只是继承了原来Python将对象解释为真或假的传统,这种解释基于对象与零的等价性。只需添加上面的语句,您的代码就可以在Python2.x上运行,并在升级到Python3.x时自动运行(最终您可以将赋值任务交给__nonzero__)。

票数 75
EN

Stack Overflow用户

发布于 2011-11-21 07:14:16

在Python3中使用__bool__方法。对于Python2,您需要__nonzero__

票数 68
EN

Stack Overflow用户

发布于 2011-11-21 07:10:26

因为对应的特殊方法在Python2中称为__nonzero__(),而在Python3之前不是__bool__()

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8205558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档