django - Does Python 3.5 type hinting allow covariant return types? -


i know if python 3.5 type hinting (the typing module) supports return type covariance, pycharm's autocompletion.

here base classes sports framework:

class baseleague:     def get_teams(self) -> list[baseteam]:         ...      ...  class baseteam:     def get_captain(self) -> baseplayer:         ...          def get_players(self) -> list[baseplayer]:         ...      ...  class baseplayer:     team = none # type: baseteam      ... 

(there many more methods left out, methods on baseleague returning baseteam/baseplayer/baseleague objects, etc.)

i have multiple modules subclass these 3 classes in parallel, , add/override methods , attributes.

in hockey/models.py, have:

class league(baseleague):     ...  class team(baseteam):     ...  class player(baseplayer):     ... 

and in football/models.py, have same thing:

class league(baseleague):     ....  class team(baseteam):     ...  class player(baseplayer):     ... 

(i have 20+ other sports, soccer, baseball, etc..)

in pycharm, when i'm in football.models.team , type self.get_captain()., pycharm shows me attributes base class baseplayer, show me attributes subclass football.models.player. seems closely related return type covariance.

i have feeling need use generic , typevar this:

player = typevar('player', covariant=true) team = typevar('team', covariant=true) league = typevar('league', covariant=true)  class baseteam(generic[player, team, league]):     def get_players(self) -> list[player]:         ... 

and in football.models like:

class team(baseteam[player, team, league]): 

...where player, team, league references subclasses in same module.

but it's not working (pycharm not showing autocomplete @ all), , i'm not sure if i'm using right syntax.

i working because base classes part of framework's api, , users subclass them hundreds of times, i'd them benefit pycharm autocomplete, without having override each method in own code.)

does know if possible?


Comments