Używam Python 3.5 wraz z Mypy, aby mieć pewne podstawowe sprawdzanie statyczne dla mojego skryptu. Ostatnio refaktoryzowałem niektóre metody zwracania OrderedDict, ale wpadłem na "obiekt typu" nie jest indeksowany ", gdy próbowałem użyć adnotacji zwracanej z podanymi kluczami i wartościami.Jak określić typy OrderedDict K, V dla adnotacji typu Mypy?
Zmniejszona przykład:
#!/usr/bin/env python3.5
from collections import OrderedDict
# this works
def foo() -> OrderedDict:
result = OrderedDict() # type: OrderedDict[str, int]
result['foo'] = 123
return result
# this doesn't
def foo2() -> OrderedDict[str, int]:
result = OrderedDict() # type: OrderedDict[str, int]
result['foo'] = 123
return result
print(foo())
I to jest wyjście pyton gdy jest prowadzony:
Traceback (most recent call last):
File "./foo.py", line 12, in <module>
def foo2() -> OrderedDict[str, int]:
TypeError: 'type' object is not subscriptable
Mypy ma jednak żadnego problemu z adnotacją typu w komentarzu i będzie w rzeczywistości ostrzec jeśli próbuję zrobić result[123] = 123
.
Co to powoduje?
Działa teraz (mypy wersja 0,501). – max