Objetos em Python – Mega Tutorial Python

Bem, falar de objetos em Python é praticamente a mesma coisa que falar de água molhada. Isso porque, por mais que possamos programar de maneira estrutural, ou funcional, tudo no Python é um objeto.

Em vários artigos eu falo que o assunto em questão é um dos mais importantes para um programador.

Isso porque essa série de artigos que eu venho escrevendo sobre Python são introdutórios, e praticamente toda a base que você precisa para começar a programar com essa linguagem maravilhosa.

Mas se tem um tópico importante no aprendizado de um programador, é orientação a objetos.

Isso porque praticamente qualquer linguagem moderna hoje em dia segue este paradigma.

Note que este artigo não foca na teoria de programação orientada a objetos, mas sim como programar orientado a objetos com Python.

oop what is oop meme

Mega Tutorial Python

  1. Introdução
  2. Primeiros passos e o Hello World
  3. Tipos de Dados em Python
  4. Operadores e Expressões
  5. Trabalhando com Funções em Python
  6. Estrutura de Dados em Python
  7. Trabalhando com Módulos em Python
  8. Controle de Fluxo em Python
  9. O Python e o While Else
  10. Objetos em Python (Este artigo)
  11. Representação Interna dos Objetos
  12. Entrada e Saída em Python
  13. Trabalhando com Exceções em Python
  14. Qual o Próximo Passo?
  15. Começando com Flask Framework
  16. Templates no Flask Framework
  17. Flask com Angular 6

Objetos Em Python

Classes e Objetos são os dois principais tópicos quando falamos sobre Objetos em Python.

Até agora, nós vimos tudo um tanto procedural. Agora nós vamos ver como podemos estruturar um programa utilizando classes e objetos.

O que são classes

Imagine uma classe sendo uma representação de algo.

Classes podem contem diversos atributos, que são como variáveis de uma classe.

São através destes atributos que estruturamos as informações em uma classe.

O que são métodos

Métodos são iguais as funções que já criamos, porém eles representam as ações que uma classe pode realizar.

A principal diferença entre uma função e um método, programaticamente falando, é que um método sempre recebe um parâmetro a mais.

Este parâmetro, que deve ser o primeiro a ser definido no método, é chamado de self .

Note que apesar do self  ser o primeiro parâmetro do método, ele não precisa ser fornecido, pois o próprio Python já se encarrega disso, passando a referência do objeto que está chamando tal método.

Como Criar Classes em Python

Bem, vamos começar com um pouco de código.

Já que estamos falando programação orientada a objetos, vamos começar com um exemplo tradicional.

Vamos tentar modelar uma pessoa.


Essa é a classe mais simples que você pode criar.

Caso você esteja se perguntando, o pass  serve para indicar um bloco de código vazio.

Apesar do código ser simples, nós já podemos criar uma pessoa, ou instanciar um objeto do tipo Pessoa.


E ao executarmos esse código, teremos o resultado:

O método __init__ e o __new__

O método especial __init__, também conhecido como um dunder method, é um método chamado automaticamente pelo Python após a criação de um objeto for completada.

Se você já passou alguma linguagem de programação, você pode imaginar o __init__  sendo uma espécie de construtor.

Na verdade, ao criarmos um objeto, o método especial __new__  é invocado.

A função do método __new__  é retornar uma instância da classe sendo criada.

Com o retorno de __new__ , o método __init__  é invocado passando a referência do objeto criado como o primeiro argumento, o self .


Bem, depois da explicação, eu acredito que você já imagina o resultado do código abaixo:

Como Criar Atributos de Classes e de Objetos em Python

Bem, ao contrário de outras linguagens, a criação de atributos em Python é bem simples.

Bem, na verdade não.

Bem, talvez você fique confuso aqui, mas na verdade a resposta verdadeira é: é fácil, mas não é!

Vamos dar uma olhada no código abaixo:


O que temos aqui?!

Bem, nós temos uma classe chamada Pessoa que possui um atributo de classe chamado subespecie, e dois atributos de instância.

Vamos ver o que acontece com as instâncias ao alterarmos o valor de um atributo de classe.


Bem, acredito que você tenha acertado o resultado aqui, certo?!


Bem, nós não vamos nos aprofundar muito aqui, mas o importante é:

Pense em atributos de classe como uma espécie de atributo compartilhado na classe.

Se você já passou por outras linguagens de programação, talvez o static  venha a sua mente agora.

Bem, você pode encarar aqui como algo parecido para facilitar o entendimento, mas saiba que não é.

Os atributos de instância são exclusivamente do objeto instanciado em questão, enquanto o atributo de classe é compartilhado entre todas as instâncias.

Em breve eu criarei um artigo falando apenas sobre o assunto, então não precisa se preocupar!

Enquanto isso, você pode acompanhar o artigo que eu escrevi sobre representação interna de objetos em Python, caso você tenha ficado curioso.

Como Criar Métodos em Python

Agora que já sabemos criar uma classe, definir alguns atributos e no fim de tudo, criar instâncias de objetos do tipo da classe criada, vamos um pouco além e ver como criamos métodos.

Como já foi dito, métodos são funções que recebem como primeiro parâmetro a referência do objeto.

Nota: Não pense que em outras linguagens isso não acontece, é só que normalmente as linguagens fazem isso por de baixo dos panos.


Acima nós criamos uma classe chamada calculadora. Ela recebe dois atributos e possui dois métodos.

Note que para todos os métodos definidos, nós passamos self  como o primeiro argumento.


E note como não precisamos passar o parâmetro self  ao chamar os métodos.

Isso acontece pois, ao utilizarmos a sintaxe objeto.metodo()  é a mesma coisa que utilizarmos Classe.metodo(objeto) .


E como é de se esperar, o resultado de c.somar()  é igual ao resultado de Calculadora.somar(c) :

Herança em Python

Bem, por último, porém não menos importante, nós vamos falar sobre herança em Python.

Talvez o caso mais comum de utilização de heranças é pensando na reaproveitação de código, herdando o comportamento de uma classe em outra.

Cuidado, isso pode ser bem perigoso. Tem um post muito bom da Caelum falando sobre isso! Clique aqui caso queira conferir!

Vamos voltar para o nosso exemplo utilizando Pessoa.


Note que não precisamos definir o método falar na classe Programador, pois neste caso específico, um Programador pode ser considerado uma Pessoa =D


Um ponto importante aqui para notar, principalmente para pessoas que vem de outras linguagens, é a utilização do super .

É comum em outras linguagens de programação como Java ou C# que ao herdarmos de uma classe, ao criarmos uma instância da classe filha, o construtor da classe pai é chamado automaticamente.

Isso não acontece aqui, até porque como nós dissemos anteriormente, o __init__  não é realmente um construtor. Então precisamos chamá-lo nós mesmos.

Conclusão

Bem, esse definitivamente é um passo importantíssimo para um programador.

Aprender orientação a objetos é praticamente obrigatório em muitos casos, e em Python não é diferente.

Note que este artigo não teve o intuito de ensinar orientação a objetos, mas sim dar uma introdução de como se trabalhar com classes e objetos em Python.

Esse tema é muito vasto e merece diversos artigos para que consigamos abordar todos os aspectos da orientação a objetos.

Mas por hoje, acho que já rendeu bastante conteúdo para você assimilar, certo?!

Até o próximo artigo, e não se esqueça de deixar o seu comentário abaixo!

Links Importantes

No Responses

  1. Pingback: Tipos de Dados em Python - Mega Tutorial Python 11 de dezembro de 2018
  2. Pingback: Mega Tutorial Python - O Guia Definitivo 11 de dezembro de 2018
  3. Pingback: Operadores e Expressões em Python 12 de dezembro de 2018

Leave a Reply