Ao escrever o código, porque repetimos a teg def init(self, name, preco, descricao): Usamos em baixo a teg super(). init(name, preco): Não era só para escrever (self, descricao), sendo que estamos herdando o atributo name e preco?
Ao escrever o código, porque repetimos a teg def init(self, name, preco, descricao): Usamos em baixo a teg super(). init(name, preco): Não era só para escrever (self, descricao), sendo que estamos herdando o atributo name e preco?
Olá, Jeanderson.
Tudo bem?
Quando estamos trabalhando com herança em Python, a ideia é que a subclasse (por exemplo, Prato
) herde atributos e métodos da classe base (por exemplo, ItemCardapio
). No entanto, a subclasse pode ter atributos adicionais ou comportamentos específicos que não estão presentes na classe base.
Vamos ao seu exemplo:
from modelos.cardapio.item_cardapio import ItemCardapio
class Prato(ItemCardapio):
def __init__(self, nome, preco, descricao):
super().__init__(nome, preco)
self.descricao = descricao
Aqui está o que cada parte faz:
Definição do método __init__
na subclasse Prato
:
def __init__(self, nome, preco, descricao):
Este método é o construtor da subclasse Prato
. Ele define que, para criar um objeto Prato
, precisamos fornecer nome
, preco
e descricao
.
Chamada ao super().__init__(nome, preco)
:
super().__init__(nome, preco)
A função super()
chama o método __init__
da classe base ItemCardapio
. Isso é necessário para inicializar os atributos nome
e preco
que são definidos na classe base. Sem essa chamada, os atributos nome
e preco
não seriam inicializados corretamente na instância da subclasse Prato
.
Inicialização do atributo específico da subclasse Prato
:
self.descricao = descricao
Aqui, estamos definindo um novo atributo descricao
que é específico da subclasse Prato
.
Se você não chamasse super().__init__(nome, preco)
, os atributos nome
e preco
não seriam configurados corretamente na instância Prato
. A chamada ao super()
garante que a lógica de inicialização da classe base seja executada, permitindo que a subclasse adicione ou modifique atributos conforme necessário.
Espero ter entendido e conseguido ajudar. Qualquer dúvida manda aqui. Bons estudos!