Publicado em Progamação, Python, Tecnologia

Python: Uma Brevíssima Introdução à Programação Orientada a Objetos (POO)

O Python conta com algumas estruturas que facilitam o trabalho com dados, um exemplo são as tuplas. Tuplas, são coleções de dados relacionados entre si:

vangogh = ('Vincent', 'pintor', 'holandês', 19, 'ruivo', 1)

Nessa tupla, a gente agrupou um conjunto arbitrário de dados relacionados ao famoso pintor holandês. A gente poderia formatar essa informação para ser apresentada na tela:

van_str = '{} foi um {} {} do século {}. \n' \
          + 'Era {} e tinha {} orelha só'.format(*vangogh)
print(van_str)
Vincent foi um pintor holandês do século 19.
Era ruivo e tinha 1 orelha só

A gente tem dados, e está manipulando esses dados. Mas, poderíamos criar a nossa própria estrutura (classe) para armazenar e manipular dados de pintores famosos:

 
class Pintor:
    nome = ''
    nacionalidade = ''
    seculo = 0
    cabelo = ''
    orelhas = 0

Agora, os nossos dados, que vamos chamar de “atributos“, ficaram associados a uma “classe“. Para manipular esses dados, precisamos “instanciar” a classe, é dizer, criar um “objeto” desse tipo (dessa classe):

vangogh = Pintor()

vangogh.nome = 'Vincent'
vangogh.nacionalidade = 'holandês'
vangogh.seculo = 19
vangogh.cabelo = 'ruivo'
vangogh.orelhas = 1

E, para usar essa estrutura:

van_str = '{} foi um pintor {} do século {}. \n' \
          + 'Era {} e tinha {} orelha só'.format(
              vangogh.nome, vangogh.nacionalidade,
              vangogh.seculo, vangogh.cabelo, vangogh.orelhas)
print(van_str)
Vincent foi um pintor holandês do século 19.
Era ruivo e tinha 1 orelha só

Visto assim, não parece muito vantajoso se comparado ao uso da tupla do primeiro exemplo. Bom, a verdade é que nem sempre faz sentido usar o paradigma da programação orientada a objeto. Mas, o potencial dela aparece quando começamos a manipular os dados. Inclusive, é justo dizer que o primeiro exemplo é tão simples assim porque ele próprio está fazendo uso da orientação a objetos embutida na linguagem (tanto as tuplas como as strings são objetos no Python).

Vamos adicionar um “método” a nossa classe:

class Pintor:
    nome = ''
    nacionalidade = ''
    seculo = 0
    cabelo = ''
    orelhas = 0

    def __str__(self):
        return '{} foi um pintor {} do século {}. \n' \
               + 'Era {} e tinha {} orelha só'.format(
                   self.nome, self.nacionalidade, self.seculo,
                   self.cabelo, self.orelhas)

Os métodos são funções que, dentro da classe,  manipulam os dados relacionados à própria classe. No exemplo, o método especial “__str__” vai determinar a forma em que os dados dessa classe devem ser imprimidos na tela. Daqui pra frente, nós poderíamos fazer o seguinte:

vangogh = Pintor()

vangogh.nome = 'Vincent';
vangogh.nacionalidade = 'holandês'
vangogh.seculo = 19
vangogh.cabelo = 'ruivo'
vangogh.orelhas = 1

print(vangogh)
Vincent foi um pintor holandês do século 19.
Era ruivo e tinha 1 orelha só

Começou a ficar mais simples, não é? Vamos com outro método especial, o “construtor“:

class Pintor:

    def __init__(self, nome, nacionalidade, seculo, cabelo, orelhas):
        self.nome = nome
        self.nacionalidade = nacionalidade
        self.seculo = seculo
        self.cabelo = cabelo
        self.orelhas = orelhas

    def __str__(self):
        return '{} foi um pintor {} do século {}. \n' \
               + 'Era {} e tinha {} orelha só'.format(
                   self.nome, self.nacionalidade, self.seculo,
                   self.cabelo, self.orelhas)

O método especial “__init__” é o construtor da classe. Agora já podemos construir o objeto facilmente desde o início, sem precisar atribuir um valor para cada atributo separadamente:

vangogh = Pintor('Vincent', 'holandês', 19, 'ruivo', 1)
print(vangogh)
Vincent foi um pintor holandês do século 19.
Era ruivo e tinha 1 orelha só

Ficou até mais simples do que era quando usamos apenas a tupla.

A palavra “self” representa o próprio objeto, a própria instancia. É a forma de dizer “imprime quantas orelhas tem o objeto ‘vangogh’ e não quantas tem o objeto ‘portinari'”.

Isso aqui é apenas a ponta do iceberg.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.