Assign class boolean value in Python

后端 未结 2 1032
死守一世寂寞
死守一世寂寞 2020-12-11 01:12

If statements in Python allow you to do something like:

   if not x:
       print \"X is false.\"

This works if you\'re using an empty list

相关标签:
2条回答
  • 2020-12-11 01:21
    class Foo:
         def __nonzero__(self): return False
         __bool__ = __nonzero__ # this is for python3
    
    In [254]: if Foo():
       .....:     print 'Yeah'
       .....: else: print 'Nay'
       .....:
    Nay
    

    Or, if you want to be ultra-portable, you can define __len__ only, which will have the same effect in both languages, but that has the (potential) downside that it implies that your object has a meaningful measure of length (which it may not).

    This will work for any instance, depending on the actual logic you put in the method.

    0 讨论(0)
  • 2020-12-11 01:28

    You need to implement the __nonzero__ method on your class. This should return True or False to determine the truth value:

    class MyClass(object):
        def __init__(self, val):
            self.val = val
        def __nonzero__(self):
            return self.val != 0  #This is an example, you can use any condition
    
    x = MyClass(0)
    if not x:
        print 'x is false'
    

    If __nonzero__ has not been defined, the implementation will call __len__ and the instance will be considered True if it returned a nonzero value. If __len__ hasn't been defined either, all instances will be considered True.

    In Python 3, __bool__ is used instead of __nonzero__.

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