Coletânea Python do ZERO às Redes Neurais Artificiais

Fernando Feltrin · Capítulo 114 de 287

Páginas do PDF

Coletânea Python do ZERO às Redes Neurais Artificiais

Manipulando atributos de uma classe

 

Da mesma forma que na programação convencional estruturada, existe a

chamada leitura léxica do interpretador, e ela se dá garantindo que o interpretador fará a leitura dos dados em uma certa ordem e sequência (sempre da esquerda para a direita e linha após linha descendente).

Seguindo essa lógica, um bloco de código declarado posteriormente pode alterar ou “atualizar” um dado ou valor em função de que na ordem de interpretação a última informação é a que vale.

Aqui não há necessidade de nos estendermos muito, mas apenas raciocine que é perfeitamente normal e possível manipular dados de dentro de uma classe de fora da mesma.

Porém é importante salientar que quando estamos trabalhando com uma classe, ocorre a atualização a nível da variável que está instanciando a classe, a estrutura interna da classe continua intacta. Por exemplo:

 

Aproveitando o exemplo anterior, note que está declarada dentro da classe Pessoa uma variável de nome nome que tem ‘Padrão’ como atributo.

Logo após criamos uma variável de nome pessoa1 que inicializa a classe e toma posse de seu conteúdo.

Neste momento, por meio da função print( ) passando como parâmetro pessoa1.nome o retorno é: Padrão

Agora após criar a variável pessoa1 e atribuir a mesma a classe Pessoa, no momento que realizamos a alteração pessoa1.nome = ‘Fernando’, esta alteração se dará somente para a variável pessoa1.

Por meio da função print( ) é possível ver que pessoa1.nome agora é Fernando.

Note que a estrutura da classe, “o molde” da mesma se manteve, para a classe Pessoa, nome ainda é ‘Padrão’, para a variável pessoa1, que instanciou Pessoa e sobrescreveu nome, nome é ‘Fernando’.

Como dito anteriormente, uma classe pode servir de molde para criação de vários objetos, sem perder sua estrutura a não ser que as alterações sejam feitas dentro dela, e não pelas variáveis/objetos que a instanciam.

Importante salientar que é perfeitamente possível fazer a manipulação de

dados dentro da classe operando diretamente sobre a mesma, porém, muito cuidado pois dessa forma, como a classe serve como “molde”, uma alteração diretamente na classe afeta todas suas instâncias.

Em outras palavras, diferentes variáveis/objetos podem instanciar uma classe e modificar o que quiser a partir disto, a estrutura da classe permanecerá intacta. Porém quando é feita uma alteração diretamente na classe, essa alteração é aplicada para todas variáveis/objetos que a instancia.

Aqui seguindo com o mesmo exemplo, porém criando 3 variáveis pessoa que recebem como atributo a classe Pessoa, a partir do momento que é lida a linha de código Pessoa.nome = ‘Fernando’ pelo interpretador, a alteração da variável nome de ‘Padrão’ para ‘Fernando’ é aplicada para todas as instâncias. Sendo assim, neste caso o retorno será:

Fernando

Fernando

Fernando

Em resumo, alterar um atributo de classe via instancia altera o valor somente para a instância em questão (somente para a variável/objeto que instanciou), alterar via classe altera diretamente para todas as instâncias que a usar a partir daquele momento.