Ich habe ein Modul namens module.py mit einer Funktion Funktion, die einen Typ mit einem sehr langen Namen zurückgibt,
Code: Select all
Type_whose_name_is_so_long_that_we_do_not_want_to_call_it_over_and_over_again
Um den Code besser lesbar zu machen, habe ich einen Typalias T in der entsprechenden Stub-Datei module.pyi definiert.Hier ist eine vereinfachte Version meines Codes module.pyi:
Code: Select all
T = Type_whose_name_is_so_long_that_we_do_not_want_to_call_it_over_and_over_again
def function()->T: pass
class Type_whose_name_is_so_long_that_we_do_not_want_to_call_it_over_and_over_again: pass
Code: Select all
import module
foo:module.T = module.function()
Was ich versucht habe
Google-Suche
Ich habe bei Google nach „Mypy-Typ-Alias, der nur in Stub-Datei verwendet wird“ gesucht. konnte aber keine Lösung finden, die das verhindert mypy verhindert, dass der Typalias in anderen Modulen erkannt wird. Ich hatte erwartet, dass die Definition von T nur in der Stub-Datei den Umfang einschränken würde, aber es scheint, dass mypy den Typalias auch in anderen Modulen finden kann.
Code korrigieren< /h5>
Ich habe mehrere Ansätze ausprobiert, darunter:
[*]Umbenennen des Typalias: I T wurde in _T geändert, um die Wahrscheinlichkeit zu verringern, dass es gefunden wird von anderen Modulen, aber das hat das Problem nicht behoben.
[*]Verwendung von if TYPE_CHECKING: Ich habe versucht, den Typalias innerhalb eines if TYPE_CHECKING bedingt zu definieren -Block, aber das hat auch nicht verhindert, dass der Typalias in anderen Modulen verwendet wird.
[*]Exporte einschränken: Ich habe __all__ = [" hinzugefügt Funktion", „Type_whose_name_is_so_long_that_we_do_not_want_call_it_over_and_over_again“] zur Datei module.pyi hinzugefügt, um explizit zu steuern, welche Namen exportiert werden, aber auf den Typalias T konnte weiterhin zugegriffen werden.
Hier ist der geänderte Code für module.pyi:
Code: Select all
from typing import TYPE_CHECKING
if TYPE_CHECKING:
_T = Type_whose_name_is_so_long_that_we_do_not_want_to_call_it_over_and_over_again
def function()->_T: pass
class Type_whose_name_is_so_long_that_we_do_not_want_to_call_it_over_and_over_again: pass
__all__ = ["function", "Type_whose_name_is_so_long_that_we_do_not_want_to_call_it_over_and_over_again"]
Code: Select all
import module
foo:module._T = module.function() # Still works