How do I access the name of a class instance so I can use it later?

1

I have a question about how to use the "NAME" of a class instance. If I declare it directly:

Sala_10 = Sala("Sala_10") 

works fine. I can use Sala_10.método() , but I would like to instantiate the rooms through a function, called add_sala(id) .

I even create the normal room, but I do not know how to reference this room ... of course, I get the error message:

  

NameError: name 'Sala_10' is not defined

My code goes below, thanks!

test-myclass.py

salas = []

class Sala:

    def __init__(self, id):

        self.id = id

        self.alunos = []  # lista de alunos da sala.

    def add_alunos(self, num, nome):
        nome = Aluno(num, nome)  # -> cria o objeto ALUNO
        self.alunos.append(nome)


class Aluno:
    def __init__(self, num, nome):
        self.num = num
        self.nome = nome


def add_sala(id):  # função para criar e adicionar SALAS
    nome = Sala(id)  # cria uma nova sala chamada: o valor da variável x
    salas.append(nome)

When I do:

Sala_9A = Sala("Sala_9A")
Sala_9A.add_alunos(1, "Austregésilo de Athayde")
print(Sala_9A.alunos[0].nome)

It works fine, but if you do:

add_sala("Sala_9B")

for i in range(len(salas)):
    print(salas[i].id)

It does not work! How to use the reference passed below as the name of the object to invoke it after?

Now I'm going to use the room Sala_9B created by the function add_sala() how to use to correctly access this instance of the Room class?

Sala_9B.add_alunos(1, "Sepúlveda Pertence")
print(Sala_9B.alunos[0].nome)
  

Traceback (most recent call last):     File "/home/bueno/Programming/Program_Council/examples-help/test-myclass.py", line 44, in       Sala_9B.add_alunos (1, "Sepúlveda Pertence")   NameError: name 'Sala_9B' is not defined

    
asked by anonymous 23.07.2018 / 22:54

1 answer

0

Your room class seems a bit lazy or "useless", since it only serves to add students, it might be a better way to use a dictionary and key in the room name. Something like this:

salas = {}

class Aluno:
    def __init__(self, num, nome):
        self.num = num
        self.nome = nome

    def __str__(self):
        return self.nome


def add_sala(id_sala):  # função para criar e adicionar SALAS
    if id_sala not in salas:
        salas[id_sala] = []  # cria uma nova sala com o nome passado em id_sala
    else:
        print('Sala já existente!')

def add_alunos(num, nome, id_sala): # -> Melhor seria passar o aluno já criado para diminuir o acoplamento
    nome = Aluno(num, nome)  # -> cria o objeto ALUNO
    salas[id_sala].append(nome)

add_sala('Sala-B9') # -> adiciona nova sala
print(salas.keys()) # -> mostra salas existentes
print(salas['Sala-B9']) # -> mostra alunos da sala apontada
add_alunos(10, 'Matheus', 'Sala-B9') # -> adiciona aluno a Sala-B9
print(salas['Sala-B9'][0]) # -> mostra o primeiro aluno na Sala-B9
# pode ser feito um for para todos os alunos assim: for aluno in salas['Sala-B9']: ...
add_sala('Sala-B9') # -> tentando adicionar sala já existente, a sala não é sobrescrita
add_sala('Sala-A10') # -> adiciona outra sala
print(salas.keys()) # -> mostra salas existentes
    
24.07.2018 / 04:41