Oi Jeanderson! Tudo bem?
Vamos por partes para esclarecer suas dúvidas sobre o método especial __str__ em Python.
O que é o __str__?
O método __str__ é um método especial em Python que define como um objeto deve ser representado como uma string. Quando você usa print(objeto) ou str(objeto), o Python chama o método __str__ do objeto para determinar o que deve ser exibido.
No seu exemplo:
def __str__(self):
return self._nome
Isso significa que, quando você imprime uma instância dessa classe, será exibido o valor do atributo _nome.
Por que usar __str__?
Usar o __str__ é útil para tornar a saída dos objetos mais legível e informativa. Em vez de exibir algo como <modelos.cardapio.bebida.Bebida object at 0x0000021556F363F0>, você verá o nome da bebida, por exemplo, 'Suco de Melancia'.
Toda classe nova precisa de __str__?
Não é obrigatório que toda classe tenha um método __str__. No entanto, é uma boa prática adicioná-lo se você quiser uma representação legível do objeto quando ele for impresso. Especialmente em classes que representam entidades que têm uma representação textual significativa, como produtos, pessoas, etc.
str é abreviação de string?
Sim, str é uma abreviação de "string". Em Python, str é o tipo de dados para strings (sequências de caracteres).
Exemplo Prático
Vamos criar um exemplo prático para ilustrar:
class Bebida:
def __init__(self, nome, preco, tamanho):
self._nome = nome
self._preco = preco
self._tamanho = tamanho
def __str__(self):
return f"{self._nome} - {self._tamanho} - R$ {self._preco}"
class Prato:
def __init__(self, nome, preco, descricao):
self._nome = nome
self._preco = preco
self._descricao = descricao
def __str__(self):
return f"{self._nome} - {self._descricao} - R$ {self._preco}"
bebida_suco = Bebida('Suco de Melancia', 5.0, 'grande')
prato_paozinho = Prato('Pãozinho', 2.0, 'O melhor pão da cidade')
print(bebida_suco)
print(prato_paozinho)
Ao executar este código, a saída será:
Suco de Melancia - grande - R$ 5.0
Pãozinho - O melhor pão da cidade - R$ 2.0
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.