What does "if self:" mean?

Viewed 106

Example:

class Bird:
    def __init__(self):
        self.sound = "chirp!"

    def reproduce_sound(self):
        if self:
            print(self.sound)

bird = Bird()
bird.reproduce_sound()

What does if self: mean? What is the case where the reproduce_sound function call prints nothing?

1 Answers

It checks the truth value of the instance and only prints if it is True. In your example the check doesn't do anything useful and will always print something. You can override the __bool__ method to change its default behaviour.

For example:

class Bird:
    ...
    def __bool__(self):
        return bool(self.sound)

Then:

b = Bird()
b.reproduce_sound()   # Prints "chirp!"
b.sound = 0           # or any falsy value, such as None or ""
b.reproduce_sound()   # Won't print anything because b == False
Related