Fazer isso é bem simples e deixa seu código mais inteligível.
Contexto
Desde maio de 2015, definir tipos para as variáveis foi incluído no PEP (PEP0484: Type Hints) e implementado neste repositorio. A ideia desta atualização foi facilitar a analise do código, os processos de refatoração e possibilitar validações que só seriam possíveis durante a execução. (Quem diria que definir tipos para as variáveis seria tão útil, certo? 😉)
Isso quer dizer que o Python está virando uma linguagem “fortemente tipada”? Não. Como o próprio nome da diretiva do PEP sugere, esta definição é uma hint, ou seja, uma dica. Se você quiser ignorar o tipo sugerido, está liberado. (mas pq vc faria isso?)
O processo é bem simples e pode ser utilizado com toda a flexibilidade do Python. Vamos aos exemplos…
Definindo tipo de uma variável
foo: int = 42 bar: str = "bacon"
O código acima cria as variáveis foo, com o tipo sugerido de int e bar do tipo string (str). Caso você tente associar o valor “x” na variável foo (que foi definida como int),você vai conseguir e esta variável vai passar a ser considerada como uma string, que é o comportamento normal do Python.
A vantagem deste processo está na sua IDE. Se ela for (pelo menos) razoável, ela vai te avisar que o valor esperado para a variável foo é alguma coisa do tipo int e isso vai te ajudar a evitar bugs durante o desenvolvimento.
Você pode utilizar qualquer tipo como hint da sua variável e caso precise definir dois (ou mais) tipos possíveis para uma variável, utilize o Union (do pacote typing):
from typing impoort Union foobar: Union[int, str] = "bar"
Desta forma, se você atribuir int ou str, a IDE não vai emitir um warning/erro.
Definindo tipo dos itens de uma lista
Seguindo a lógica do exemplo acima, voce poderia definir uma variável como list, mas isso não vai te falar do que é esta lista.
Todavia, isso é possível. Basta importar List do pacote typing.
from typing import List foo: List[int] = [1,2,3,4] bar: List[str] = ["x", "y"]
No exemplo acima, a variável foo agora é uma lista de int e a bar é uma lista de strings. Você pode utilizar o Union também para falar que a lista pode ser mista.
Exemplo
Segue um exemplo mais completo deste tipo de tipagem
# -*- coding: utf-8 -*- from datetime import datetime from typing import List, Union class Bar: _id: int description: str class Foo: def __init__(self, _id: int, name: str, bars: List[Bar], correlation_ids: List[str], created_at: Union[datetime, None] = None, misc: Union[List[int], List[str]] = None): self._id: int = _id self.name: str = name self.created_at: Union[datetime, None] = datetime.utcnow() if created_at is None else created_at self.bars: List[Bar] = bars self.correlation_ids: List[str] = correlation_ids self.misc: Union[List[int], List[str]] = misc if __name__ == '__main__': f = Foo(_id=1, name="Foo1", bars=[Bar(), Bar(), Bar()], correlation_ids=["1", "2", "3"], created_at=datetime.now(), misc=[1, "x"])
Espero ter ajudado.
Latest posts by Breno RdV (see all)
- Estamos de mudança! - abril 28, 2024
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022