Mapa mental
Python - OO

Conteúdo do mapa
Python - OO
I. Classes
- 1. Introdução
- pessoa.py
- class Nome:
- Por convenção sempre inicia com letra maiúscula
- class Nome:
- main.py
- from pessoa import Pessoa
- Importar
- p1 = Pessoa()
- Criar um objeto a partir da classe
- p2 = Pessoa()
- p1 é diferente de p2
- Com isso podemos criar variáveis que pertencem só a uma pessoa
- p1.nome = 'João'
- Atributo da pessoa
- Com isso podemos criar variáveis que pertencem só a uma pessoa
- p1 é diferente de p2
- from pessoa import Pessoa
- pessoa.py
- 2. Métodos da Instância
- main.py
- pessoa.py
- A palavrinha self refere-se à instância p1
- É como se fosse falar(p1)
- A palavrinha self refere-se à instância p1
- __init__
- a classe inicializa os atributos do objeto
- p1 = Pessoa('Luiz', 29)
- p1 = Pessoa(idade=29, nome='Luiz')
- Ela diferencia as variáveis da instância e variáveis da classe
- Se for utilizar a variavel_da_classe em outro método, continuaremos utilizando self.variavel_da_classe
- comer()
- p1.comer('Maçã')
- Luiz está comendo maçã.
- p1.comer('Pera')
- Luiz já está comendo.
- return faz com que o resto do método não seja executado
- p1.comer('Maçã')
- main.py
- 3. Convenção de Nomes
- PascalCase
- significa que todas as palavras iniciam com letra maiúscula e nada é usado para separá-las
- MinhaClasse
- MeuObjeto
- significa que todas as palavras iniciam com letra maiúscula e nada é usado para separá-las
- camelCase
- a primeira letra sempre será minúscula e o restante das palavras deverá iniciar com letra maiúscula
- minhaFuncao
- Não é utilizada em python
- a primeira letra sempre será minúscula e o restante das palavras deverá iniciar com letra maiúscula
- snake_case
- Todas as letras serão minúsculas e separadas por um underline
- minha_variavel
- funcao_legal
- Todas as letras serão minúsculas e separadas por um underline
- PascalCase
- 4. Métodos da Classe
- pessoa.py
- cls quer dizer que estou me referindo à classe
- Então não terei acesso ao parâmetro self e sim ao cls
- Logo, só terei acesso as variáveis(atributos) da classe e não as da instância
- Então não terei acesso ao parâmetro self e sim ao cls
- @classmethod indica que se trata de um método de classe e não de instância
- cls quer dizer que estou me referindo à classe
- main.py
- Observe que o método de classe por_ano_nascimento() é um factory method pois ele retorna um objeto da classe, ele fabrica o objeto para a gente
- pessoa.py
- 5. Métodos Estáticos
- Eles não precisam nem da instância nem da classe
- é como se fosse uma função normal que foi colocada dentro da classe para ficar organizado
- pessoa.py
- main.pu
- Eles não precisam nem da instância nem da classe
- 6. Getters/ Setters
- setter irá configurar um padrão para quando for declarar o atributo da instância
- Muitas vezes o __init__ faz papel de setter
- getter irá nos retornar o valor do atributo da instância que chamamos
- preco.py
- Esse algoritmo permite que ao definirmos o preço dos produtos utilizemos tanto números quanto R$
- Esse algoritmo faz com que o nome do produto seja composto sempre com a primeira letra maiúsucla e o restanto minúsculo
- main.py
- Exemplo
- setter irá configurar um padrão para quando for declarar o atributo da instância
- 7. Atributos de Classe
- A.vc altera o valor da variável da classe A
- a1.vc está criando um atributo direto na instância a1
- 1. Introdução
II. Encapsulamento
- Serve para proteger a classe, "escondendo" métodos/atributos
- Problema
- basededados.py
- main.py
- bd.dados foi destruído por um arquivo fora da classe
- Solução
- O python não adota as palavras public, protected, private
- Convenção
- self._dados
- o _ serve para indicar que o atributo não deve ser utilizado fora da classe
- self.__dados
- mais forte que o anterior
- Liberando para acesso externo
- print(bd.dados)
- Agora quando tentarmos modificar bd.dados externamente trará uma exceção
- print(bd.dados)
- self._dados
- basededados.py
III. Relação
- 1. Associação
- Situação
- classes.py
- main.py
- classes.py
- Como fazer essas classes se relacionarem por associação?
- Modificações
- classes.py
- Escritor
- Caneta
- MaquinaDeEscrever
- Escritor
- main.py
- classes.py
- Modificações
- Quer dizer que uma classe pode viver sem a outra
- 2. Agregação
- A classe CarrinhoDeCompras pode existir sozinha mas precisa de produtos para fazer suas operações, a classe Produto também pode existir sozinha mas pode fazer parte de outras partes do programa
- classes.py
- main.py
- 3. Composição
- Uma classe vai ser dona de objetos de outra classe
- No momento em que um cliente é apagado, todos os endereços referentes à ele também serão
- classes.py
- main.py
- Uma classe vai ser dona de objetos de outra classe
- Situação
- 4. Herança Simples
- 1. Problema
- Código repetido
- 2. Solução
- classes.py
- Cliente e Aluno herdam tudo de Pessoa
- Pessoa é uma superclasse
- Cleinte é uma subclasse
- Métodos específicos
- Cliente/Aluno é uma especialização de Pessoa
- main.py
- classes.py
- 3. Sobreposição de membros
- Sobrescrever falar
- Primeiro executar falar da superclasse Pessoa, depois executar o falar de ClienteVip
- __init__
- Sobrescrever falar
- 4. Classe Pai Pode Invocar Método de Classe Filho
- 1. Problema
- 5. Herança Múltipla
- Qual o resultado de D.falar()?
- No caso de heranças múltiplas, o python irá procurar o método na classe da esquerda para a direita
- Exemplo: Classe que gera log
- 1. Associação
IV. Classes Abstratas
- 1. Como criar
- 1. Importação mínima
- from abc import ABC, abstractmethod
- abc = abstract base class
- from abc import ABC, abstractmethod
- É uma classe genérica que não quero que ela seja instânciada
- Uma classe genérica pode conter métodos concretos ou métodos abstratos
- O método abstrato é um método que não tem corpo, serve para que as classes filhas herdem este método e sejam obrigadas a criarem esse método dentro dessas classes filhas
- Uma classe genérica pode conter métodos concretos ou métodos abstratos
- 2. Declaração
- Agora todas as classes filhas de A terão que instanciar o método falar
- Polimorfismo de sobreposição
- É o princípio que permite que classes derivadas de uma mesma superclasse tenham métodos iguais (de mesma assinatura) mas comportamentos diferentes.
- mesma assinatura = mesma quantidade e tipo de parâmetros
- ou seja se o método abstrato utilizar a assinatura (self, msg), as classes filhas deverão adotar a mesma assinatura (self, msg)
- mesma assinatura = mesma quantidade e tipo de parâmetros
- É o princípio que permite que classes derivadas de uma mesma superclasse tenham métodos iguais (de mesma assinatura) mas comportamentos diferentes.
- Polimorfismo de sobreposição
- Agora todas as classes filhas de A terão que instanciar o método falar
- 3. Exemplo de classe abstrata com métodos concretos e mistos
- 1. Importação mínima
- 1. Como criar
V. Criando Exceções Personalizadas
VI. Sobrecarga de Operadores
- é possível alterar o comportamento dos operadores em python
- Métodos
- Alterando o operador + e comando print
VII. Métodos Mágicos
- São todos aqueles iniciados por __
- https://rszalski.github.io/magicmethods/
- O __init__ na verdade não é o construtor
- Dessa forma é como se fizessemos a classe não ser construída, por isso o type(a) é NoneType
- Foi utilizado o comando super() pois todas as classes na verdade derivam de object
- super().__new__(cls) pode ser substituído por object.__new__(cls)
- Criar métodos/variáveis de classe
- Criar uma classe que só será instanciada uma vez
- Impedir que alguém sete um atributo nome
- Alterando quando a classe for utilizada como string
- Alterando o comportamento da função len()
- São todos aqueles iniciados por __
VIII. Gerenciadores de Contexto
- Toda vez que eu for abrir alguma coisa e fechar alguma coisa terei de utilizar um gerenciador de contexto
- Ex.: Escrever em um arquivo
- Ex.: Conexão de rede
- Ex.: DB
- Escrever em um arquivo
- Criar gerenciador de contexto personalizado
- Desativar erros
- Desativar erros
- Método 2
- Utilizar sempre o comando with
- Toda vez que eu for abrir alguma coisa e fechar alguma coisa terei de utilizar um gerenciador de contexto
IX. Metaclasses
- A metaclasse é a classe responsável por criar as classes
- Em Python tudo é um objeto, inclusive as classes
- 1. Uma ClASSE pAI CHAMANDO UM MÉTODO DA CLASE fILHA QUE nÃO eXISTE
- 3. Solução: Forçar que as classes que herdarem de A precisam criar o método fala
- 2. Criando uma metaclasse
- Criaremos uma metaclasse que herdará de type
- mcs = metaclasse
- name = nome da classe que está sendo criada
- bases = as classes pai dessa c lasse que está sendo criada
- namespace = todo atributo da classe e todo método que é criado na classe
- 4. Impedir que alguém sobrescreva o atributo attr_classe da metaclasse
- 5. Criar classes utilizando type()
X. DocStrings
- 1. Documentação de uma linha
- uma_linha.py
- main.py
- import uma_linha.py
- help(uma_linha)
- help(uma_linha.funcao)
- print(uma_linha.funcao.__doc__)
- import uma_linha.py
- uma_linha.py
- 2. DocString como string
- Serve para a linha de código não ficar muito longa no pycharm
- 3. Múltiplas Linhas
- 4. Documentação De Função
- 5. Documentação de Classe
- 1. Documentação de uma linha
X1. DataClasses
- Como criar uma classe incluindo __init__, __repr__, __eq__
- __repr__ já foi configurado
- __eq__ já foi configurado
- Se eu precisar alterar o método __init__
- Forçar tipo de atributo
- Remover atributo do __repr__
- Como criar uma classe incluindo __init__, __repr__, __eq__
XII. Enum
- Serve para evitar if muito longo
- Sem
- Com
- Melhorado
- Melhorado
Imagens e arquivos do mapa
Informações
- Descrição
- Linguagem de programção Python Mapa Mental sobre Python - OO, criado por Isaque Paulo em 05-01-2022.
- Criado por
- Isaque Paulo
- Visualizações
- 8
- Avaliação












































































