Programação Orientada a Objetos em Python: além de entender o básico…

… o que mais preciso aprender, para dominar os principais conceitos relacionados a este paradigma? Nestas últimas semanas, me tornei um “CDF” no sentido literal da sigla (e não estou me referindo à abreviação “Cabeça De Ferro”), pois passei um bom tempo “sentadinho na cadeira” (além de sofrer com as consequências da exposição prolongada nesta posição), para me aprofundar nos estudos sobre orientação a objetos! Além do essencial (classes, métodos, herança, abstração, encapsulamento, polimorfismo, entre outros tópicos), também tive contato com outros aspectos relacionados, bem como algumas particularidades do próprio Python…

Dentre deles está o método construtor, que por sua vez é fundamental para inicializar os atributos de uma classe, a partir do momento em que uma instância é criada. Em Python, isto é feito através de uma função declarada dentro da classe chamada __init__, além de receber o parâmetro self e não prover nenhum retorno. Até aqui, tudo bem. Embora seja possível declará-la passando outras variáveis além de self, por ora vou manter as coisas mais simples possível, para evitar complicações “indesejadas” e atrasos em meu cronograma de estudos. Mas em algum momento, retornarei a este assunto para explorar mais à fundo.

Também me deparei com outro importante conceito da programação orientada a objetos: os descritores! Eles são objetos que permitem mudar o comportamento de acesso aos atributos de uma classe, através do uso de métodos especiais. Graças a eles, será possível realizar o gerenciamento de tais atributos de forma mais granular. Para isto, será necessário definir o tipo de descritor a ser utilizado (através de métodos especiais), bem como estabelecer as permissões de acesso para os métodos e atributos das classes envolvidas.

Por fim, as metaclasses também chamaram a minha atenção, em vista do clássico sentimento de “deja-vu” proporcionado por elas em relação a abstração e suas particularidades. Se na abstração, temos a habilidade de criar novas instâncias com base nas classes pré-definidas (e a partir delas, tirar proveito da abstração), as metaclasses são utilizadas para criar novas classes! Em muitos materiais didáticos sobre o assunto, as metaclasses são referidas como classes abstratas em um outro patamar e a sua capacidade “extra” de abstração traz uma série de benefícios para a criação, padronização e reutilização de código.

Inicialmente, os meus esforços para me aperfeiçoar em Python, são direcionados para atender aos requisitos para a obtenção da certificação Cisco DevNet (a qual certamente irei me dedicar a partir do ano que vem). No entanto, considerando as possibilidades que estas habilidades podem me oferecer no cenário atual da TI, além do fato de que a linha divisória que separa áreas de desenvolvimento e infraestrutura têm ficado mais tênue, também aproveitarei estas oportunidades para unir o útil ao agradável: além de me tornar um especialista em TI mais completo e capacitado, também realizarei um antigo sonho: ser um “mini-programador”!

Se é que existe mesmo um “programador de uma linguagem só”… &;-D