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

[Dúvida] Sobre o útimo exercício...

  1. Crie uma classe chamada Cliente e pense em 4 atributos. Em seguida, instancie 3 objetos desta classe e atribua valores aos seus atributos através de um método construtor.
class Cliente:
    clientes = []
    def __init__ (self, nome, idade, cidade, conta_aberta):
        self.nome = nome
        self.idade = int(idade)
        self.cidade = cidade
        self.conta_aberta = False
        Cliente.clientes.append(self)

    def __str__(self):
        return f'{self.nome} de {self.idade} anos é natural de {self.cidade}'
    

cliente1 = Cliente('Cláudio', '37', 'Salvador', 'True')
cliente2 = Cliente('Verônica', '28', 'Belo Horizonte', 'False')
cliente3 = Cliente('Vitor', '29', 'Salvador','False')

print(cliente1)
print(cliente2)
print(cliente3)
print(clientes)

Saída:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

A minha dúvida é, de que maneira posso dar print de uma lista já definida no escopo da classe. Pois restaurantes está lá, mas quando eu chamo no escopo global é como se não existisse.

ou eu estou deixando algo passar?

3 respostas
solução!

Olá! Tudo bem?

O problema aqui está na última linha do código, onde está tentando imprimir a lista de clientes usando print(clientes). A lista de clientes está armazenada no atributo de classe clientes da classe Cliente, não em uma variável chamada clientes. Isso está causando um erro de nome não definido.

Para corrigir isso, você deve acessar a lista de clientes através do atributo de classe clientes da seguinte maneira:

print(Cliente.clientes)

Assim será impressa a lista de clientes que foi preenchida quando os objetos foram instanciados.

Você também pode querer considerar renomear o atributo de classe clientes para evitar confusão, uma vez que o nome é semelhante ao nome do objeto que está tentando imprimir. Por exemplo, você pode renomear para listaclientes ou algo semelhante.

Nesse caso, ficaria assim:

class Cliente:
    lista_clientes = []   # Renomeado o atributo de classe para evitar confusão

    def __init__(self, nome, idade, cidade, conta_aberta):
        self.nome = nome
        self.idade = int(idade)
        self.cidade = cidade
        self.conta_aberta = False
        Cliente.lista_clientes.append(self)

    def __str__(self):
        return f'{self.nome} de {self.idade} anos é natural de {self.cidade}'

cliente1 = Cliente('Cláudio', '37', 'Salvador', 'True')
cliente2 = Cliente('Verônica', '28', 'Belo Horizonte', 'False')
cliente3 = Cliente('Vitor', '29', 'Salvador', 'False')

print(cliente1)
print(cliente2)
print(cliente3)
print(Cliente.lista_clientes)    # Acessando a lista de clientes através do atributo de classe

Agora, o atributo de classe que armazena a lista de clientes é chamado de listaclientes. Isso evita confusão com o nome de variáveis locais e torna mais claro que se trata de uma lista pertencente à classe Cliente.

. . .

Se esta resposta te ajudou, favor marcar como solucionado ✓

Boto fé, irmã. Obrigado pela explicação. :)

Imagina! :)