Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Me ajudem com um erro de um código por favor

olá, estou escrevendo um código de uma classe para uma agenda, mas esta dando erro segue o código:

class Agenda_Mae:
    def __init__(self, titulo, descricao, categoria):
        self.titulo = titulo.sanitizacao()
        self.descricao = descricao.sanitizacao()
        self.categoria = categoria.sanitizacao()
        self.lista_agenda = armazena()

    def sanitizacao(self):
        return title()
        return capetalize()

    def armazena(self, titulo, descricao, categoria):
        lista_agenda = []
        lista_agenda.append(titulo, descricao, categoria)
        return lista_agenda

    def __str__(self):
        return str("Titulo:",self.titulo) + "\n" + "Descrição:" + self.descricao + "\n" + "Categoria:" + self.categoria

erro é:

Traceback (most recent call last):
  File "C:\Users\Meu Computador\PycharmProjects\agenda.oo\venv\agenda.py", line 13, in <module>
    Agenda_Mae(titulo=input("Titulo:"), descricao=input("Descrição:"),
  File "C:\Users\Meu Computador\PycharmProjects\agenda.oo\venv\oo.py", line 5, in __init__
    self.titulo = titulo.sanitizacao()
AttributeError: 'str' object has no attribute 'sanitizacao'

quem poder ajudar agradeço

a minha agenda e:

import datetime
from oo import Agenda_Mae
from oo import Data
from oo import Hora

nome = [input("nome:")]

print("***************")
print("****AGENDA*****")
print("***************")


Agenda_Mae(titulo=input("Titulo:"), descricao=input("Descrição:"),
           categoria=input("Categoria:"))

Data(input("qual data deseja agendar:"))
print(Data)

Hora(input("qual horario deseja agendar:"))
print(Hora)

print(Agenda_Mae)
4 respostas

Olá João, tudo bem? Espero que sim!

O erro está sendo exibido porque você está tentando usar um método sanitizacao() que pertenceria à classe string. Quando faz titulo.sanitizacao(), titulo é uma string, e você está tentando acessar esse método a partir dessa string, e não existe esse método para strings.

Fiz algumas modificações no código para que ele funcione, e tenho algumas considerações a fazer.

Código de uma agenda em um arquivo .py

Observando a imagem, temos em 1 o método construtor da classe. Para chamarmos um método da própria classe, precisamos utilizar self.nome_do_método e passar os parâmetros que desejamos para esse método. Portanto usei self.sanitizacao() passando como parâmetro titulo, descricao e categoria para os respectivos atributos. Acrescentei também um parâmetro extra para designar qual é o formato de formatação que será feito. Para a lista_agenda, passei todos os parâmetros para o método armazena, uma vez que é um método que recebe 3 parâmetros.

Em 2, acrescentei dois parâmetros para a função e fiz uma checagem do parâmetro formato, retornando o texto aplicado ao tipo de formatação desejado.

Em 3, adicionei um parênteses, passando uma tupla para o método append, uma vez que o método append só adiciona um valor por vez, e geraria um erro se passasse 3 valores de uma só vez.

Em 4, removi a transformação str() se separei os valores com um +.

Uma observação: Se deseja adicionar mais valores para a lista_agenda posteriormente, não irá funcionar bem dessa forma que havia pensado. Uma vez que chamando o método armazena, ele cria uma lista vazia e preenche somente os novos valores passados, substituindo assim os valores antigos. Se quiser adicionar mais elementos terá de pensar em uma outra maneira de fazer essa parte.

Vou deixar aqui abaixo o código por escrito:

class Agenda_Mae:
    def __init__(self, titulo, descricao, categoria):
        self.titulo = self.sanitizacao(titulo, 'title')
        self.descricao = self.sanitizacao(descricao, 'texto')
        self.categoria = self.sanitizacao(categoria, 'texto')
        self.lista_agenda = self.armazena(titulo, descricao, categoria)

    def sanitizacao(self, texto, formato):
        if formato == 'title':
            return texto.title()
        elif formato == 'texto':
            return texto.capitalize()

    def armazena(self, titulo, descricao, categoria):
        lista_agenda = []
        lista_agenda.append((titulo, descricao, categoria))
        return lista_agenda

    def __str__(self):
        return "Titulo:" + self.titulo + "\n" + "Descrição:" + self.descricao + "\n" + "Categoria:" + self.categoria

Espero que tenha tirado sua dúvida.

Estou à disposição. Bons estudos!

Primeiramente muito obrigado! Aprendi bastante com suas correções, mas queria te pedir algo da pra vê que errei muito, eu te peço que me fala o que eu devo melhorar. O que devo aprender ou aperfeiçoar e não venha cometer esses mesmos erros. Se puder me responder mais uma vez obrigado.

Olá João,

Erros são naturais quando se trata de programação, você vai aperfeiçoando com o tempo. Conforme for fazendo os cursos da formação Python e os outros cursos de Python na plataforma você vai se acostumando com a linguagem.

Uma boa fonte de informação é a documentação do Python que é bem completa, está em português e está bem organizada. Recomendo que você leia e sempre pesquise quando houver alguma dúvida. Mesmo quando você estiver bem avançado ela será uma boa fonte de informação.

Procure por projetos ou exercícios para treinar, você vai aprendendo conforme for praticando. Há sites como o URI Online que possuem diversos exercícios no qual você consegue praticar.

Bons estudos!

solução!

valeu João vou da uma olhado no URI, mais uma vez obrigado.