Orientação a objetos é um termo que descreve uma série de técnicas para estruturar soluções para problemas computacionais. No nosso caso específico, vamos falar de programação OO, que é um paradigma de programação no qual um programa é estruturado em objetos, e que enfatiza os aspectos abstração, encapsulamento, polimorfismo e herança12.
Convencionalmente, um programa tem um fluxo linear, seguindo por uma função principal (ou o corpo principal do programa, dependendo da linguagem de programação) que invoca funções auxiliares para executar certas tarefas à medida que for necessário. Em Python é perfeitamente possível programar desta forma, convencionalmente chamada de programação procedural.
Programas que utilizam conceitos OO, ao invés de definir funções independentes que são utilizadas em conjunto, dividem conceitualmente o `problema' (ou domínio13) em partes independentes (objetos), que podem conter atributos que os descrevem, e que implementam o comportamento do sistema através de funções definidas nestes objetos (métodos). Objetos (e seus métodos) fazem referência a outros objetos e métodos; o termo `envio de mensagens' é utilizado para descrever a comunicação que ocorre entre os métodos dos diferentes objetos.
Na prática, um programa orientado a objetos em Python pode ser descrito como um conjunto de classes -- tanto pré-definidas quanto definidas pelo usuário -- que possuem atributos e métodos, e que são instanciadas em objetos, durante a execução do programa. A seção seguinte concretiza estes conceitos com exemplos.