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 Person
classe, instanciamos um objeto e mostramos seu valor booleano. Como esperado, o person
objeto é True
.
Para substituir esse comportamento padrão, você implementa o __bool__
método especial. O __bool__
método deve retornar um valor booleano True
ou False
.
Por exemplo, suponha que você queira que o person
objeto avalie False
se 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)) # False
Linguagem de código: Python ( python )
Neste exemplo, o __bool__
método retorna False
se 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 Payroll
classe 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)) # True
Linguagem de código: Python ( python )
Como a Payroll
classe 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)) # False
Linguagem de código: Python ( python )
No entanto, o exemplo a seguir __len__
retorna 10, que é True
:
payroll.length = 10
print(bool(payroll)) # True
Linguagem de código: Python ( python )
Resumo
- Todos os objetos de classes personalizadas retornam
True
por padrão. - Implemente o
__bool__
método para substituir o padrão. O__bool__
método deve retornarTrue
ouFalse
. - 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ãoTrue
por padrão.