• Arthur Besse
    link
    fedilink
    7
    edit-2
    1 year ago

    Returns a if a is truthy and then checks if b is truthy. If neither are truthy, it returns b.

    Not quite. If a is not truthy, then the expression a or b will always return b.

    So, there is never any reason to check the truthiness of b.

    you can paste this in your repl to confirm it does not.
    class C:
     def __repr__(self): return [k for k, v in globals().items() if v is self][0]
     def __bool__(self):
      print(f"{self}.__bool__() was called")
      return False
    
    a, b = C(), C()
    print(f"result: {a or b}")
    
    output
    a.__bool__() was called
    result: b