Defining “boolness” of a class in python

前端 未结 3 2192
伪装坚强ぢ
伪装坚强ぢ 2020-11-27 17:06

Why doesn\'t this work as one may have naively expected?

class Foo(object):
    def __init__(self):
        self.bar = 3
    def __bool__(self):
        retu         


        
相关标签:
3条回答
  • 2020-11-27 17:44

    For Python 2-3 compatibility, just add this to your example:

    Foo.__nonzero__ = Foo.__bool__
    

    or expand the original definition of Foo to include:

    __nonzero__ = __bool__
    

    You could of course define them in reverse too, where the method name is __nonzero__ and you assign it to __bool__, but I think the name __nonzero__ is just a legacy of the original C-ishness of Python's interpretation of objects as truthy or falsy based on their equivalence with zero. Just add the statement above and your code will work with Python 2.x, and will automatically work when you upgrade to Python 3.x (and eventually you an drop the assignment to __nonzero__).

    0 讨论(0)
  • 2020-11-27 18:03

    The __bool__ method is used in Python 3. For Python 2, you want __nonzero__.

    0 讨论(0)
  • 2020-11-27 18:10

    Because the corresponding special method is called __nonzero__() in Python 2, and not __bool__() until Python 3.

    0 讨论(0)
提交回复
热议问题