Python __bool__

Resumo : neste tutorial, você aprenderá como implementar o __bool__método Python para retornar valores booleanos para objetos de uma classe customizada.

Introdução ao método Python __bool__

Um objeto de uma classe personalizada está associado a um valor booleano. Por padrão, ele avalia como True. Por exemplo:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age


if __name__ == '__main__':
    person = Person('John', 25)Linguagem de código:  Python  ( python )

Neste exemplo, definimos a Personclasse, instanciamos um objeto e mostramos seu valor booleano. Como esperado, o personobjeto é True.

Para substituir esse comportamento padrão, você implementa o __bool__método especial. O __bool__método deve retornar um valor booleano Trueou False.

Por exemplo, suponha que você queira que o personobjeto avalie Falsese a idade de uma pessoa é menor de 18 anos ou maior de 65 anos:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __bool__(self):
        if self.age < 18 or self.age > 65:
            return False
        return True


if __name__ == '__main__':
    person = Person('Jane', 16)
    print(bool(person))  # FalseLinguagem de código:  Python  ( python )

Neste exemplo, o __bool__método retorna Falsese a idade for menor que 18 ou maior que 65 anos. Caso contrário, ele retorna True. O objeto person tem o valor de idade 16, portanto, retorna False neste caso.

O método __len__

Se uma classe personalizada não tiver o __bool__método, o Python procurará o __len__()método. Se __len__for zero, o objeto é False. Caso contrário, é True.

Se uma classe não implementar os métodos __bool__e __len__, os objetos da classe serão avaliados como True.

O seguinte define uma Payrollclasse que não implementa __bool__apenas o __len__método:

class Payroll:
    def __init__(self, length):
        self.length = length

    def __len__(self):
        print('len was called...')
        return self.length


if __name__ == '__main__':
    payroll = Payroll(0)
    print(bool(payroll))  # False

    payroll.length = 10
    print(bool(payroll))  # TrueLinguagem de código:  Python  ( python )

Como a Payrollclasse não substitui o __bool__método, o Python procura o __len__método ao avaliar os objetos da Folha de Pagamento para um valor booleano.

No exemplo a seguir, a folha de pagamento __len__retorna 0, que é False:

payroll = Payroll(0)
print(bool(payroll))  # FalseLinguagem de código:  Python  ( python )

No entanto, o exemplo a seguir __len__retorna 10, que é True:

payroll.length = 10
print(bool(payroll))  # TrueLinguagem de código:  Python  ( python )

Resumo

  • Todos os objetos de classes personalizadas retornam Truepor padrão.
  • Implemente o __bool__método para substituir o padrão. O __bool__método deve retornar Trueou False.
  • Se uma classe não implementar o __bool__método, Python usará o resultado do __len__método. Se a classe não implementar ambos os métodos, os objetos serão Truepor padrão.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *