1
resposta

Não consigo chamar uma classe na outra

Bom/boa dia/tarde/noite. Bem , o problema é o seguinte. Estou tentando gerar um fragmento de uma escala utilizando 2 classes diferentes, uma para professor (prof_pedaço >Prof_Pedaço) e uma para ajudante (ajud_pedaço>Ajud_Pedaço), utilizando a lista. Eu gostaria de chamar, no final da classe Ajud_Pedaço, o resultado da classe Prof_Pedaço. Para tal, eu importei na classe de ajudante a classe do professor e tentei chamar o método que exibe o resultado, porém ele não me traz isso. Segue abaixo o código de cada classe:

from random import choice

class Prof_Pedaço:

    def __init__(self):

        self.prof_pedaco = ["Cailane","Priscila","Joyce","Evelyn","Nanda","Aline","Daniela"]
        self.escolha = ''
        self.escala_prof_pedaco = ['Pedacinho: ','']



    def get_escala(self):
        for c in range(0,2):
            self.prof_pedaco = ["Cailane","Priscila","Joyce","Evelyn","Nanda","Aline","Daniela"]

            self.escolha = choice(self.prof_pedaco)       
            self.escala_prof_pedaco[1] = self.escolha

        return self.escala_prof_pedaco 

    #def importar(self):
        make_escala_p_pedaco = Prof_Pedaço().escala_prof_pedaco
        print(make_escala_p_pedaco)

if __name__ == "__main__" :
        make_escala_p_pedaco = Prof_Pedaço()
        print(make_escala_p_pedaco.get_escala())
from random import choice
from prof_pedaço import Prof_Pedaço

class Ajud_Pedaço:

    def __init__(self): #Classe construtora/Define os atributos

        self.escala_ajud_pedaco = ['Ajud: ','']

        self.ajud_pedaco = ["Bella","Raquel","Nara","Gisele"]
        self.escolha = ''

    def get_escala(self): #Sorteio dos nomes/Retorna a escala atualizada
        for c in range(0,2):
            self.ajud_pedaco = ["Bella","Raquel","Nara","Gisele"]

            self.escolha = choice(self.ajud_pedaco)

            self.escala_ajud_pedaco[1] = self.escolha

        return self.escala_ajud_pedaco
if __name__ == "__main__" :

        make_escala_p_pedaco = Prof_Pedaço
        print(make_escala_p_pedaco.get_escala)

        make_escala_a_pedaco = Ajud_Pedaço()
        print(make_escala_a_pedaco.get_escala())

Esse é o resultado que recebo:

<function Prof_Pedaço.get_escala at 0x000000F19E9B5870>
['Ajud: ', 'Bella']
1 resposta

Olá Pablo, tudo bem com você?

Peço desculpas pela demora em lhe responder.

No código onde temos a classe Ajud_Pedaço, será necessário realizarmos a adição de parênteses em dois locais.

O primeiro local é no momento da criação do objeto make_escala_p_pedaco. O segundo local é no momento em que é realizado a chamada do método get_escala() no objeto criado.

Código com as mudanças para comparação.

if __name__ == "__main__":

    make_escala_p_pedaco = Prof_Pedaço()
    print(make_escala_p_pedaco.get_escala())

    make_escala_a_pedaco = Ajud_Pedaço()
    print(make_escala_a_pedaco.get_escala())

Resultado

['Pedacinho: ', 'Priscila']
['Ajud: ', 'Nara']

A falta dos parâmetros resulta na apresentação do local de memória em que estão salvos os métodos.

Para o teste foi retirado a tralha (#) que mantinha o método importar da classe Prof_Pedaço como um comentário.

Deixo como dica de boas práticas de programação, a seguinte recomendação, no momento em que escolhemos a nomenclatura para nossas classes, é recomendado não utilizarmos palavras com acento ou com c-cedilha (ç).

Para saber um pouco mais sobre os padrões de nomenclaturas em python, recomendo a leitura do seguinte artigo.

O artigo acima está em inglês, caso tenha dificuldade com o idioma recomendo o uso do tradutor do navegador.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!