Dicas de tipo

Programação Orientada a Objetos Intermediária em Python

Jake Roach

Data Engineer

Código sem dicas de tipo

class Student:
    def __init__(self, name, student_id, tuition_balance):
        self.name = name
        self.student_id = student_id
        self.tuition_balance = tuition_balance

# Tentar criar uma classe pode ser complicado
walker = Student("Sarah Walker", 319921, 15000)
  • student_id deve ser um inteiro?
  • tuition_balance deve ser float ou inteiro? Talvez string?
  • Depois de criar walker, como lembrar seu tipo mais adiante no código?
Programação Orientada a Objetos Intermediária em Python

Dicas de tipo

Ferramenta opcional que adiciona informações de tipo ao código

  • Facilita ler e depurar
  • Uma das melhores formas de demonstrar habilidades de Python de nível empresarial
  • Não é imposta pelo interpretador
  • Palavras-chave embutidas, biblioteca typing, classes personalizadas
# Adicione dica de tipo ao criar
# uma variável
gpa: float = 3.92
# Adicione dica de tipo a uma função/método
# na definição
def check_grades(year: str) -> List[int]:
    ...
# Dá para usar classes personalizadas
students: Dict[str, Student] = {...}
Programação Orientada a Objetos Intermediária em Python

Dicas com tipos embutidos

# Dica de tipo para lógica declarativa
name: str = "Frost"  # Antes: name = "Frost"
student_id: int = 91031367
tuition_balance: float = 17452.78
# Dica de tipo em definições de função/método
def get_schedule(semester: str) -> dict:
    ...
  • Use a sintaxe variável: tipo
  • Declarativa, forma a assinatura da função/método
  • def .... () -> tipo: para indicar o retorno
Programação Orientada a Objetos Intermediária em Python

Biblioteca typing

typing é uma biblioteca que oferece mais ferramentas para dicas de tipo

  • List, Dict, Tuple
  • Indique objetos de topo e os elementos internos
from typing import List, Dict

student_names: List[str] = ["Morgan", "Chuck", "Anna"]
student_gpas: Dict[str, float] = {
    "Casey": 3.71,
    "Sarah": 4.0
}
  • Any, Set, Iterator, Callable
Programação Orientada a Objetos Intermediária em Python

Dicas com classes personalizadas

class Student:
    def __init__(self, name: str, student_id: int, tuition_balance: float) -> None:
        self.name: str = name
        self.student_id: int = student_id
        self.tuition_balance: float = tuition_balance

    def get_course(self, course_id: str) -> Course:
        ...
        return course
# Use Student e Course nas dicas de tipo
walker: Student = Student("Sarah Walker", 319921, 15000)
data_science: Course = walker.get_course("TDM-20100")
Programação Orientada a Objetos Intermediária em Python

Verificando tipos de objetos

# walker: Student = Student("Sarah Walker", 319921, 15000)
print(type(walker))
<class '__main__.Student'>
# data_science: Course = walker.get_course("TDM-20100")
print(type(data_science))
<class '__main__.Course'>
Programação Orientada a Objetos Intermediária em Python

Vamos praticar!

Programação Orientada a Objetos Intermediária em Python

Preparing Video For Download...