-
-
Couldn't load subscription status.
- Fork 516
Description
Hi team,
Python 3.13 has added the default parameter for TypeVar (which we can use via typing_extensions for older Python versions).
With this feature, we can remove the fields _pyi_private_set_type, _pyi_private_get_type and the mypy plugin functions related to those.
For example, instead of:
class IntegerField(Field[_ST, _GT]):
_pyi_private_set_type: float | int | str | Combinable
_pyi_private_get_type: int
_pyi_lookup_exact_type: str | intWe can define:
# **set** value type
_ST_Int = TypeVar("_ST_Int", contravariant=True, default=float | int | str | Combinable)
# **get** return type
_GT_Int = TypeVar("_GT_Int", covariant=True, default=int)
class IntegerField(models.Field[_ST_Int, _GT_Int]):
_pyi_lookup_exact_type: str | intBy using this approach, we can eliminate the mypy plugin related to __pyi_private_set/get_type, allowing us to support other type checkers beyond mypy as well.
With this change, this code will work for all static type checkers:
my_num = IntegerField()Rather than requiring:
my_num = IntegerField[float | int | str | Combinable, int]()How do you think about this approach? I'm willing to create a PR for this improvement.