Coletânea Python do ZERO às Redes Neurais Artificiais

Fernando Feltrin · Capítulo 181 de 287

Páginas do PDF

Coletânea Python do ZERO às Redes Neurais Artificiais

Tópicos Avançados em Poo

Métodos de classe

 

O paradigma da orientação a objetos, independentemente da linguagem

de programação ao qual estamos trabalhando, costuma ser uma grande barreira a ser superada pois sua estrutura lógica em parte é mais complexa se comparada com o viés estruturado de programação.

Na parte de orientação a objetos, criadas nossas primeira estruturas de

classe, temos funções que podem ser criadas dentro de suas estruturas de dados, de forma a interagir com estruturas tanto de dentro quanto fora da classe, uma vez que toda e qualquer classe, além de um molde, deve ter funcionalidade que justifique sua incorporação no código.

No âmbito das estruturas de código internas a uma classe, temos

funções, que por convenção chamamos de métodos de classe, que por sua vez podem ser declaradas de forma “automática”, onde algumas estruturas são internas e padrão para compatibilidade de interação com o método em si, mas também podemos manualmente especificar algumas regras de funcionamento de um método de classe.

Por meio do decorador @classmethod podemos, por exemplo, definir

manualmente que um determinado método de classe interage livremente com outros métodos de classe que possam existir, mas obrigatoriamente retornando dados para o escopo global da classe.

Para que tais conceitos fiquem mais claros, vamos partir para o código.

Inicialmente é criada uma classe de nome Pessoa, dentro da mesma, em seu escopo global é criado um objeto de classe de nome ano_atual que recebe como atributo um número inteiro. Este objeto, por estar situado no escopo global dessa classe, pode ser usado por qualquer método de classe.

Na sequência é criado um método construtor __init__ que recebe um

nome e uma idade, atribuindo os respectivos dados aos seus devidos objetos.

Em seguida é criado um método de classe de nome ano_nasc( ), que por

sua vez recebe três atributos de classe, cls, nome e ano_nascimento. Dentro de sua estrutura é criado um objeto de nome idade que recebe como atributo cls que por sua vez fará a subtração dos valores de ano)atual e ano_nascimento, retornando tais dados tanto para nome quanto para idade, que ambos compõe o método construtor da classe.

Repare que antes da declaração do método de classe ano_nasc( ) é

colocado um decorador @classmethod, pela leitura léxica de nosso interpretador, o método de classe que estiver associado a este decorador obrigatoriamente deverá retornar um dado/valor para o escopo global da classe.

Fora da classe é criada uma variável de nome pessoa2, que instancia a classe Pessoa, chamando a função ano_nasc( ) parametrizando a mesma com ‘Fernando’ e 1987. Esses dados serão atribuídos para nome e ano_nascimento, onde feitas as devidas interações, a diferença entre o valor de ano_atual e de ano_nascimento será atribuída para idade.

Repare no nível de interações que ocorre dentro da classe, entre os dados

repassados pelo usuário e a função ano_nasc( ) que por sua vez interage tanto com o escopo global da classe quanto com a variável que está fora dela. Uma das formas de garantir que tais interações ocorram corretamente é fazendo o uso de um decorador, neste caso, @classmethod.