2
respostas

Duvida sobre oo.

Saudações, estou estudando O.O., escrevi um codigo onde tento descrever o funcionamento de uma lanchonete.

class Produtos:
    def __init__(self, nome, preco, data_validade):
        self.nome = nome
        self._preco = preco
        self.data_validade = data_validade

    @property
    def preco(self):
        return self._preco

class Salgados(Produtos):
    def __init__(self, nome, preco, sabor, data_validade):
        super().__init__(nome, preco, data_validade)
        self.sabor = sabor
        self.conta_espaco = 0
        self.barra = "-"
        self.x = 0

    def conta_espacos(self):
        self.conta_espaco = abs(len(self.nome + self.sabor) - 50)
        return self.conta_espaco

    def contagem_de_barras(self):
        self.x = self.conta_espaco * self.barra
        return self.x


    def imprime(self):
        print (f"{self.nome} de {self.sabor} {self.x} {self.preco}" )

Estou tentando fazer com que os preços dos Salgados fiquem padronizados, um encima do outro:

Ex.:

Coxinha de Frango com Catupiry ------------------- 4.9

Kibe de Carne --------------------------------------------- 4.9

...

coxinha = loja_class.Salgados("Coxinha", 4.90, "Frango com Catupiry", 2)
kibe = loja_class.Salgados("Kibe", 4.90, "Carne", 2)

Mas o valor de self.x e self.conta espaco sempre retornam 0. Talvez seja algo muito simples que não estou vendo, mas eu n sei mais o que fazer.

Muitíssimo obrigado! :D

2 respostas

Oii Rodrigo, como você está?

Isso está ocorrendo porque é necessário executar os métodos que faz a operação tanto da contagem de espaços quanto da contagem das barras. Em seu código você está chamando apenas as variáveis, porém, para que as variáveis tenham seus valores modificados é necessário que o método seja executado. Por exemplo:

    def contagem_de_barras(self):
        self.x = self.conta_espacos() * self.barra
        return self.x

No código acima estamos chamando o método conta_espacos() que irá nos retornar um valor Y de espaços e esse valor será multiplicado pela barra. Da forma como estava, o valor da variável self.conta_espaco era zero, pois para ter o seu valor modificado era necessário executar o método conta_espacos().

Veja abaixo como fica o código com as correções (executando o método conta_espacos() no método contagem_de_barras() e o método contagem_de_barras() no método imprime()):

class Produtos:
    def __init__(self, nome, preco, data_validade):
        self.nome = nome
        self._preco = preco
        self.data_validade = data_validade

    @property
    def preco(self):
        return self._preco


class Salgados(Produtos):
    def __init__(self, nome, preco, sabor, data_validade):
        super().__init__(nome, preco, data_validade)
        self.sabor = sabor
        self.conta_espaco = 0
        self.barra = "-"
        self.x = 0

    def conta_espacos(self):
        self.conta_espaco = abs(len(self.nome + self.sabor) - 50)
        return self.conta_espaco

    def contagem_de_barras(self):
        self.x = self.conta_espacos() * self.barra
        return self.x

    def imprime(self):
        print(f"{self.nome} de {self.sabor} {self.contagem_de_barras()} {self.preco}")

coxinha = Salgados("Coxinha", 4.90, "Frango com Catupiry", 2)
kibe = Salgados("Kibe", 4.90, "Carne", 2)

coxinha.imprime()
kibe.imprime()

Qualquer dúvida estou por aqui, tá bom?

Grande abraço!

Nádia, mal te conheço mas te considero pacas.