Tenho uma dúvida sobre a função built in vars() do Python. Porque a função não retornou o atributo "ativo" no dicionário?
Tenho uma dúvida sobre a função built in vars() do Python. Porque a função não retornou o atributo "ativo" no dicionário?
Olá Rodrigo tudo bem?
A função vars() aplicada a um objeto retorna exatamente o dicionário dict daquele objeto.
Esse dicionário contém apenas os atributos de instância, ou seja, aqueles definidos dentro do método init ou atribuídos diretamente ao objeto depois que ele foi criado.
Se o atributo ativo não aparece em vars(obj), é porque ele não foi criado como atributo de instância, mas sim como atributo de classe ou simplesmente não foi definido naquele objeto.
Exemplo de atributo de classe que não aparece em vars():
class Usuario:
ativo = True
def **init**(self, nome):
self.nome = nome
u = Usuario("Ana")
print(vars(u))
Saída:
{'nome': 'Ana'}
O atributo ativo existe, mas pertence à classe Usuario e não ao objeto u, então não aparece em vars(u).
Se você quiser que ativo apareça no dicionário do objeto, precisa defini-lo como atributo de instância:
class Usuario:
def **init**(self, nome):
self.nome = nome
self.ativo = True
u = Usuario("Ana")
print(vars(u))
Saída:
{'nome': 'Ana', 'ativo': True}
Em resumo vars() só mostra atributos armazenados no dict do objeto.
Atributos definidos na classe não fazem parte desse dicionário e, portanto, não aparecem na saída.
Qualquer duvida comente ai.
Bons estudos.