For example:

class FooBar:
    def __init__(self):
        self.a: int = None
        self.foo: str = None

Is this bad practice/go against PEP guidelines or is it fine?

  • solrize@lemmy.ml
    link
    fedilink
    arrow-up
    1
    ·
    57 minutes ago

    If it can be None then the type is Optional[int] or Optional[str] as the case may be. Or I guess now int | None etc. I’m used to older versions of mypy so idk if they support that alternate syntax.

    Optional[int] would seem to be preferable but it turns out it’s not really an option type. Like Optional[None] being None is ambiguous.

  • jtrek@startrek.website
    link
    fedilink
    arrow-up
    7
    ·
    8 hours ago

    That seems like that’s going to give you an error in most type checkers. You said it’s always an int and then immediate made that a lie and made it None instead.

    Why are you trying to do this?

    • AstroLightz@lemmy.worldOP
      link
      fedilink
      arrow-up
      2
      ·
      8 hours ago

      I’m initializing variables that would be used later in the class in different functions. I wasn’t sure if I needed to do a var: <type> | None = None or if just setting it to None was fine.

      • solrize@lemmy.ml
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        56 minutes ago

        I’m going to say initializing them to None and updating them later is a code smell. If you can do so, make them non-optional and always initialize them to actual meaningful values.

    • AstroLightz@lemmy.worldOP
      link
      fedilink
      arrow-up
      2
      ·
      8 hours ago

      This is an example. For my actual use case, they would be private vars that would be set by class functions instead of passed to the constructor.