Eu sei que com TypeVar
você você pode definir o tipo de retorno de uma função dependendo do tipo de um de seus argumentos. No entanto, quero o tipo baseado no conteúdo de um argumento.
Por exemplo, a função open
retorna tipos diferentes dependendo do conteúdo do mode
argumento:
a = open("/etc/fstab", "r")
b = open("/etc/fstab", "rb")
Neste caso, my pyright
diz que a
é a TextIOWrapper
e b
é a
BufferedReader
.
Também percebi que meu direito autoral infere o tipo correto com este código:
mode = "rb"
a = open("/etc/fstab", mode)
mas se eu fizer:
def funny(mode: str):
a = open("/ect/fstab", mode)
então o direito autoral infere IO[Any]
. Portanto, claramente os direitos autorais levam em consideração mais do que o valor literal de mode
. Então, como o direito autoral está inferindo o tipo corretamente? Isso ocorre porque o tipo sugere open
ou é algum tipo de "codificação" de direitos autorais para a função open
?
Você pode fazer isso com o
typing.overload
decorador e oLiteral
tipo.