Coletânea Python do ZERO às Redes Neurais Artificiais
Objetos e Classes
Independente se você está começando do zero com a linguagem Python
ou se você já programa nela ou em outras linguagens, você já deve ter ouvido a clássica frase “em Python tudo é objeto” ou “em Python não há distinção entre variável e objeto”.
De fato, uma das características fortes da linguagem Python é que uma variável pode ser simplesmente uma variável assim como ela pode “ganhar poderes” e assumir o papel de um objeto sem nem ao menos ser necessário alterar sua sintaxe.
Por convenção, dependendo que tipo de problema computacional que estaremos abstraindo, poderemos diretamente atribuir a uma variável/objeto o que quisermos, independente do tipo de dado, sua complexidade ou seu comportamento dentro do código. O interpretador irá reconhecer normalmente uma variável/objeto conforme seu contexto e será capaz de executá-lo em tempo real.
Outro ponto que precisamos começar a entender, ou ao menos por hora desmistificar, é que na programação orientada a objetos, teremos variáveis/objetos que receberão como atributo uma classe. Raciocine que na programação convencional estruturada você ficava limitado a variável = atributo.
Supondo que tivéssemos uma variável de nome lista1 e seu atributo fosse uma lista (tipo de dado lista), a mesma estaria explícita como atributo de lista1 e sua funcionalidade estaria ali definida (todas características de uma lista).
Agora raciocine que, supondo que houvéssemos um objeto de nome mercado1, onde lista1 fosse apenas uma das características/atributos internas desse objeto, essas demais estruturas estariam dentro de uma classe, que pode inclusive ser encapsulada ou modularizada para separar seu código do restante.
Em outras palavras, apenas tentando exemplificar a teoria por trás de uma classe em Python, uma classe é uma estrutura de dados que pode perfeitamente guardar dentro de si uma infinidade de estruturas de dados, como variáveis e seus respectivos dados/valores/atributos, funções e seus respectivos parâmetros, estruturas lógicas e/ou condicionais, etc... tudo atribuído a um objeto facilmente instanciável, assim como toda estrutura dessa classe podendo ser reutilizada como molde para criação de novos objetos, ou podendo interagir com outras classes.
Como dito anteriormente, não se assuste com estes tópicos iniciais e a teoria envolvida, tudo fará mais sentido à medida que formos exemplificando cada conceito destes por meio de blocos de código.