Python suporta programação orientada a objetos (POO). Os objetivos da POO são:

  • de organizar o código;
  • para re-utilização de código em contextos semelhantes.

Aqui está um pequeno exemplo: crie uma classe Estudante, que é um objeto reunindo várias funções personalizadas (métodos) e variáveis ​​(atributos):

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

class Estudante(object):
    def __init__(self, nome):
        self.nome = nome
    def set_idade(self, idade):
        self.idade = idade
    def set_curso(self, curso):
        self.curso = curso

ana = Estudante('ana')
ana.set_idade(21)
ana.set_curso('Civil')

[/pastacode]

No exemplo anterior, a classe de Estudante tem métodos __ init__, defina_idade e defina_curso. Seus atributos são nome, idade e curso. Podemos chamar esses métodos e atributos com a seguinte notação: classinstance.method ou classinstance.attribute. O construtor __ init__ é um método especial que chamamos com: MyClass (parâmetros de inicialização se for o caso). Agora, suponha que deseja criar uma nova classe EstudanteMestrado com os mesmos métodos e atributos como o anterior, mas com um atributo de defesa adicional. Nós não iremos copiar a classe anterior, mas herdar dela:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

class EstudanteMestrado(Estudante):
    defesa = 'dezembro'

jaime = EstudanteMestrado('jaime')
jaime.defesa #console interativo
jaime.defina_idade(23)
jaime.idade #console interativo

[/pastacode]

A classe EstudanteMestrado herda dos atributos e métodos da classe Estudante. Graças a classes e a programação orientada a objeto, podemos organizar o código com classes diferentes, correspondentes a diferentes objetos que encontramos (uma classe de Experimento, uma classe de imagem, uma classe de fluxo, etc), com seus próprios métodos e atributos. Então, podemos usar a herança para considerar variações em torno de uma classe base e reutilização de código. Ex: de uma classe base de fluxo, podemos criar derivadas como FluxoStokes, FluxoTurbulento,  FluxoPotencial, etc.