Rozpoczynam nowy projekt python (python 3.5+) i chciałbym wymusić wskazówki typu w całym codebase.Czy jest sposób to zrobić z flake8
lub jakiekolwiek inne narzędzie?
Odpowiedzi:
2 dla odpowiedzi № 1Spojrzeć na mypy.
Ze strony internetowej:
Mypy to eksperymentalny opcjonalny typ statycznychecker dla Pythona, który ma na celu połączenie zalet dynamicznego (lub "kaczego") pisania i pisania statycznego. Mypy łączy w sobie ekspresyjną moc i wygodę Pythona z potężnym systemem typów i sprawdzaniem typu kompilacji. Typ Mypy sprawdza standardowe programy w języku Python; uruchamiać je za pomocą dowolnej maszyny wirtualnej Python z zasadniczo bez nakładu pracy środowiska wykonawczego.
EDYTOWAĆ
Właściwie mypy to sprawdzanie typu, więc domyślnie tosprawdza tylko, czy występują błędy związane z typami, które są sugerowane lub wnioskowane. Aby sprawić, by raportował typy nie zawierające wskazówek, możesz użyć dodatkowych przełączników wiersza poleceń, jak to udokumentowano tutaj.
--disallow-untyped-defs
zgłasza błąd po napotkaniu definicji funkcji bez adnotacji typu.
--check-untyped-defs
jest mniej dotkliwy niż poprzednia opcja - typsprawdza treść każdej funkcji, niezależnie od tego, czy ma adnotacje typu. (Domyślnie ciała funkcji bez adnotacji nie są sprawdzane). Przyjmuje, że wszystkie argumenty mają typ Any i zawsze określa Any jako typ zwracany.
--disallow-untyped-calls
zgłasza błąd, gdy funkcja z adnotacjami typu wywołuje funkcję zdefiniowaną bez adnotacji....
1 dla odpowiedzi nr 2
mypy można użyć do sprawdzenia wskazówek dotyczących typów programów w języku Python. Dokumentację można znaleźć tutaj i jest dość wszechstronny.
1 dla odpowiedzi nr 3
Inne wymienione mypy
który służy do sprawdzania podpowiedzi typu, ale go ich nie egzekwuje. Aby być bardziej surowym na temat adnotacji typu, musisz włączyć opcję następujące ustawienia konfiguracji:
disallow_untyped_calls
(Boolean, default False) blokuje połączenia funkcje bez adnotacji typu z funkcji typu adnotacje.
disallow_untyped_defs
(Boolean, domyślne Fałsz) uniemożliwia zdefiniowanie funkcje bez adnotacji typu lub z niekompletnym typem adnotacje.
Możesz też ustawić te ustawienia jako argumenty wiersza polecenia zamiast.
FYI, PyLint
nie obsługuje jeszcze wymuszania adnotacji typu, ale istnieje żądanie funkcji. I nie widzę niczego związanego z flake8
/pyflakes
przód - rozważ otwarcie żądania funkcji.