5
respostas

[Dúvida] Validar existencia de um atributo de outra classe em PYTHON

Olá estou iniciando a programar em Python e estou criando um sistema de cadastro de clientes de um consultório de psicologia.

O sistema em si consta em cadastrar um paciente e para isso criei uma classe chamada Paciente que recebe os atributos (nome, dataNascimento,documento, queixa) com uma função de cadastro que ao final adiciona o Objeto paciente em uma lista listaPacientes = [] :

import time

class Paciente:
    
    listaPacientes = []  
    def __init__(self, nome, dataNascimento, documento, queixa):
        self.__nome = nome
        self.__dataNascimento = dataNascimento
        self.__documento = documento
        self.__queixa = queixa

    
    def cadastrarPaciente():
        nomePaciente = input("Digite o nomePaciente do paciente a ser cadastrado: ")
        dataNacimentoPaciente = input(f"Digite a data de nascimento do(a) {nomePaciente}: ")
        documentoPaciente = input(f"Digite o cpf do(a) {nomePaciente}: ")
        queixaPaciente = input(f"Digite a queixaPaciente do(a) {nomePaciente}: ")
        
        nomePaciente = Paciente(nomePaciente, dataNacimentoPaciente, documentoPaciente, queixaPaciente)
        Paciente.listaPacientes.append(nomePaciente)
        
        print("\n\nO paciente foi cadastrado com sucesso!")
        print(f"\nnomePaciente: {nomePaciente.__nome}")
        print(f"Data de Nascimento: {nomePaciente.__dataNascimento}")
        print(f"documentoPaciente: {nomePaciente.__documento}")
        print(f"queixaPaciente: {nomePaciente.__queixa}")
        time.sleep(4)

Para o Psicologo iniciar o atendimento, a cada consulta ele gera um parecer mas para ele iniciar um parecer ele precisa INPUTAR o nome do paciente para que o sistema 1o cheque se o paciente existe na lista listaPacientes e 2o registre o parecer do Psicologo, para isso criei uma classe chamada Atendimento e eu estou com dificuldade no 1o momento para fazer com que o sistema valide se o paciente existe na lista de cadastro (listaPacientes = []) da classe Paciente, pois ele precisa entrar na Classe Paciente e verificar a existencia do atributo "nome" dentro do objeto paciente. Segue a classe Atendimento que é responsavel por registrar o parecer do Psicologo:

from modelos.paciente import Paciente    

class Atendimento:
    atendimentos = []
    def __init__(self, date, paciente, parecer):
        self.__date = date
        self.__paciente = paciente
        self.__parecer = parecer

    def novoAtendimento():

        pacienteDoAtendimento = input("Digite o nome do paciente que recebera o atendimento: ")
        
        if (pacienteDoAtendimento in Paciente.__nome ): ##essa validacao nao sei como fazer
            data = input("Digite a data do atendimento: ")
            parecer = input(f"Digite o parecer do {pacienteDoAtendimento}: ")
            atendimento = Atendimento(data, pacienteDoAtendimento, parecer)
            Atendimento.atendimentos.append(atendimento)
            print("\nO parecer foi cadastrado com sucesso:")
            print(f"\nPaciente: {pacienteDoAtendimento}")
            print(f"Data: {data}")
        else:
            print(f"O {pacienteDoAtendimento} não existe no banco de dados." )
5 respostas

a sua comparação Não deve ser feita com a Classe paciente e sim dentro da lista de pacientes.

Olá, eu ja tentei dessa forma mas ao acessar o método ele me retorna um erro

Método:

def novoAtendimento():

        pacienteDoAtendimento = input("Digite o nome do paciente que recebera o atendimento: ")
        
        if (pacienteDoAtendimento in Paciente.listaPacientes): ##essa validacao nao sei como fazer
            data = input("Digite a data do atendimento: ")
            parecer = input(f"Digite o parecer do {pacienteDoAtendimento}: ")
            atendimento = Atendimento(data, pacienteDoAtendimento, parecer)
            Atendimento.atendimentos.append(atendimento)
            print("\nO parecer foi cadastrado com sucesso:")
            print(f"\nPaciente: {pacienteDoAtendimento}")
            print(f"Data: {data}")
        else:
            print(f"O {pacienteDoAtendimento} não existe no banco de dados." )

Erro

Traceback (most recent call last):
  File "c:/Users/Caio_/Desktop/Psico/main.py", line 31, in <module>
    menuOpcoes()
  File "c:/Users/Caio_/Desktop/Psico/main.py", line 24, in menuOpcoes
    menuOpcoes()
  File "c:/Users/Caio_/Desktop/Psico/main.py", line 27, in menuOpcoes
    Paciente.novoAtendimento()
AttributeError: type object 'Paciente' has no attribute 'novoAtendimento'

Na vdd estava com erro na chamada do método.

Acho que o problema aqui é que a listaPaciente guarda variaveis e eu estou tentando comparar com uma STRING (input), faz sentido ?

Quando eu entro no método e escrevo o nome de uma paciente ele está me retornando o ELSE.

o que retorna quando voce tenta chamar apenas paciente.listaPacientes?

Fiz um código a parte e instanciei o paciente Caio dessa maneira:

Caio = Paciente("Caio", "29-12-1992", "1231313", "ansiedade")
Paciente.listaPacientes.append(Caio)
print(Caio.listaPacientes)

Esse foi o retorno

[<modelos.paciente.Paciente object at 0x000001FA77AFCC48>]

Parece que ele encontrou o objeto na memoria, mas quando eu tento construir uma estrutura de validação com essa logica parece que não funciona..

pacienteDoAtendimento = input("Digite o nome do paciente que recebera o atendimento: ")
        
        if (pacienteDoAtendimento == pacienteDoAtendimento.listaPacientes):

Retorno da validação acima:

 File "c:\Users\Caio_\Desktop\Psico\atendimento.py", line 14, in novoAtendimento
    if (pacienteDoAtendimento == pacienteDoAtendimento.listaPacientes): ##essa validacao nao sei como fazer
AttributeError: 'str' object has no attribute 'listaPacientes'