Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] Bug + Dúvida nos exercícios

Olá! Enquanto fazia os exercícios 2 e 3, percebi que sempre que colocamos o ativo=False, o próximo atributo fica sublinhado com erro. O que pode ser? E outra dúvida: não poderíamos tirar esse atributo (ou tirar apenas o false) e colocá-lo embaixo como self.ativo = False?

class Restaurante:
    def __init__(self, nome, categoria, ativo=False, capacidade, nota_avaliacao):
        self.nome = nome
        self.categoria = categoria
        self.ativo = ativo
        self.capacidade = capacidade
        self.nota_avaliacao = nota_avaliacao

novo_restaurante = Restaurante(nome='Santa Marmita', categoria='Fast Food')

Essa é a mensagem que o terminal mostra:

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

1 resposta
solução!

Oi Douglas, o que está acontecendo é que está sendo violada uma regra de sintaxe do python. Quando vc declara argumentos em uma função ou classe, vc pode declarar de duas formas, os argumentos padrão (args) ou os argumentos de palavra chave (kwargs). E a regra de sintaxe é que a partir do momento que vc declarar um argumento de palavra chave, todos os em seguida devem ser da mesma forma.

Então:

# invalido
# existem argumentos padrao depois de um de palavra chave
def __init__(self, nome, categoria, ativo=False, capacidade, nota_avaliacao):

# valido
# existem apenas padrao
def __init__(self, nome, categoria, ativo, capacidade, nota_avaliacao):

# valido
# todos os em sequencia sao de palavra chave
def __init__(self, nome, categoria, ativo=False, capacidade=None, nota_avaliacao=0):

#valido
# todos sao palavra chave
def __init__(self, nome='teste', categoria='teste', ativo=False, capacidade=None, nota_avaliacao=0):

Quanto a sua segunda dúvida. Sim, vc poderia adicionar self.ativo = False mas isso impediria que vc pudesse instanciar esse objeto com essa propriedade como True, apenas alterar depois de criar o objeto. Se essa for uma necessidade do seu projeto, o certo seria passar mesmo como argumento.