After learning about TYPE_CHECKING i made it a habit to put all imports that were only needed for type checking into an if TYPE_CHECKING: guard. But now I am wondering if that is actually intended to be used like that. Checking whether an import is only needed at type checking time can get quite tedious and sometimes you run into situations were you introduced some code that made the import a requirement at runtime.

How do you use TYPE_CHECKING? Whenever it is possible or only when using it actually solves a circular import?

  • thomasloven@lemmy.world
    link
    fedilink
    English
    arrow-up
    3
    ·
    edit-2
    1 year ago

    I don’t like having to quote the types, so I use it exclusively for avoiding circular imports.

    • o11c
      link
      fedilink
      English
      arrow-up
      3
      ·
      1 year ago
      from __future__ import annotations
      
    • qwop
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      You still need to import the type before using it in a stringified type annotation for it to be valid though, so you’d need the import in an if TYPE_CHECKING: block either way, no?

      • thomasloven@lemmy.world
        link
        fedilink
        English
        arrow-up
        2
        ·
        1 year ago

        Yes, but if it’s in a TYPE_CHECKING block I can ONLY use the annotation with quotes*, which is why I only use that method if I must.

        • except with from __future__ import annotations as I’ve just learned.
        • qwop
          link
          fedilink
          English
          arrow-up
          1
          ·
          1 year ago

          Ah yeah, I see what you meant.