Skip to content

Instantly share code, notes, and snippets.

@luigiMinardi
Created March 12, 2022 22:36
Show Gist options
  • Save luigiMinardi/b733a3d6d24f69ba90dda2830c6f4030 to your computer and use it in GitHub Desktop.
Save luigiMinardi/b733a3d6d24f69ba90dda2830c6f4030 to your computer and use it in GitHub Desktop.
Resumo python Orientação a Objeto

O que é OO?

Opa, tudo certo? Pense nesses nomes dificeis como convensões que foram dadas pra nomear certas coisas dentro do código, não se preocupe muito se você sabe exatamente o nome dessas coisas, foque em conseguir escrever o código em si e saiba que vai sempre ter gente pra te ajudar no que precisar.

A respeito dos nomes vou te explicar alguns aqui:

*vou colocar entre parênteses o nome em inglês pra você :)

modulo (module)

Assim como respondido aqui modulos são nada mais do que o nome do arquivo. Dentro de um arquivo você pode ter funções, classes e variaveis globais.

Se você tem um arquivo exemplo.py então você tem o modulo exemplo que é o nome do seu arquivo!

pacote (package)

Ainda nessa mesma resposta que eu citei anteriormente, temos o significado de um pacote. Que nada mais é do que a pasta onde um arquivo se encontra.

Se o módulo (arquivo) que eu citei anteriormente está na pasta meus_exemplos então quando você for importar esse seu arquivo pra dentro de outro arquivo você faria import meus_exemplos.exemplo.

caminho (path)

Esse caminho que você faz dentro das pastas pra chegar em algum lugar é chamado de path. Você tem o path do python que é o caminho que leva até o arquivo python3.exe que é o que vai fazer você conseguir executar seu código python na versão que você tiver instalada. Você tem também o path da raiz do seu projeto que é o caminho até a pasta onde seu projeto está armazenado e onde, a partir dali o python vai começar a contar pros imports de modules e packages.

Então se você está na raiz do seu projeto e for importar outro module que está na raiz do seu projeto você vai apenas dar import nome_do_arquivo. E se você tem o nosso módulo exemplo dentro da pasta meus_exemplos e outro modulo segundo_exemplo dentro dessa mesma pasta, pra importar o exemplo pra dentro do segundo_exemplo você vai precisar digitar import meus_exemplos.exemplo mesmo ambos estando no mesmo pacote (na mesma pasta), porque o importante pro python é o caminho a partir da raiz do projeto até o modulo e não o caminho a partir de um modulo até outro modulo.

classe (class)

De acordo com a documentação:

Classes proporcionam uma forma de organizar dados e funcionalidades juntos. Criar uma nova classe cria um novo “tipo” de objeto, permitindo que novas “instâncias” desse tipo sejam produzidas. Cada instância da classe pode ter atributos anexados a ela, para manter seu estado. Instâncias da classe também podem ter métodos (definidos pela classe) para modificar seu estado.

class Veiculo:
    def __init__(self, marca, modelo, tipo):
        self.marca = marca
        self.modelo = modelo
        self.tipo = tipo
        self.tamanho_tanque_de_gasolina = 14
        self.quantidade_de_gasolina = 0

    def enche_o_tanque(self):
        self.quantidade_de_gasolina = self.tamanho_tanque_de_gasolina
        print('O tanque de gasolina agora está cheio.')

    def dirige(self):
        print(f'O {self.modelo} está sendo dirigido.')

Como visto no exemplo acima, uma classe é feita pra representar alguma coisa, no nosso caso um veiculo.

instancia (instance)

Como você pode ver na wikipedia instancia é um objeto cujo comportamento e estado são definidos pela classe.

O que isso significa?

Significa que quando chamamos uma classe nós temos uma instancia dela.

Quando temos uma instancia de uma classe nós chamamos essa instancia de um objeto.

No caso do nosso exemplo, pra chamar a classe Veiculo, basta fazer:

meu_veiculo = Veiculo('Honda', 'Ridgeline', 'Truck')

metodo (method)

Como classes representam objetos do mundo real, esses objetos tem comportamentos, seus comportamentos são contidos em funções, e essas funções são chamadas de metodos.

Ou seja, métodos nada mais são que funções que estão dentro de uma classe, por exemplo:

    def dirige(self):
        print(f'O {self.modelo} está sendo dirigido.')

atributo (attribute)

Os atributos assim como o próprio nome ja deixa a entender são as coisas que definem um objeto. Um veiculo tem uma marca, um modelo, um tipo, etc.

Então se eu quero que meu veiculo tenha tudo isso eu tenho que definir com os atributos.

Um exemplo é a quantidade de gasolina do nosso veiculo, que fizemos começar como 0.

        self.quantidade_de_gasolina = 0

__init__ nosso inicializador (initializer)

Muitas vezes nós temos que ter o objeto já com alguns atributos definidos, mas nós não queremos um valor padrão e sim que a pessoa que vá usar a classe defina esses atributos, pra isso nós temos o metodo __init__ onde cada parametro dele é obrigatório de ser passado ao criar o objeto.

class Veiculo:
    # isso obriga a pessoa que criar o veiculo a dizer qual a marca, o modelo e o tipo
    def __init__(self, marca, modelo, tipo): 
        # aqui atribuimos o que escrevemos na instancia a um atributo do nosso veiculo
        self.marca = marca
        self.modelo = modelo
        self.tipo = tipo

o parâmetro self

O parâmetro self é uma referência à instância atual da classe e é usado para acessar variáveis (atributos) ​​que pertencem à classe.

Por isso temos sempre que passar o self como primeiro parâmetro de um metodo. O python não lê esse primeiro parâmetro como se fosse um parâmetro que atribuimos/queremos atribuir algo a ele, então não precisa ter medo da marca (no nosso exemplo) que você passar ao instanciar a classe ser atribuida ao self ou coisa do tipo.

importando só uma parte do código

Se você quiser importar por exemplo apenas a classe Veiculo de dentro do exemplo basta fazer from meus_exemplos.exemplo import Veiculo

outras dicas e exemplos:

programação orientada a objeto

Recomendo que leia esse pequeno livro gratuito e open source pra entender melhor como funciona.

exemplos usados em algumas explicações:

Classes

Metodos e Atributos

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment