mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-03 07:04:53 +00:00
![]() We now handle generic constructor methods on generic classes correctly: ```py class C[T]: def __init__[S](self, t: T, s: S): ... x = C(1, "str") ``` Here, constructing `C` requires us to infer a specialization for the generic contexts of `C` and `__init__` at the same time. At first I thought I would need to track the full stack of nested generic contexts here (since the `[S]` context is nested within the `[T]` context). But I think this is the only way that we might need to specialize more than one generic context at once — in all other cases, a containing generic context must be specialized before we get to a nested one, and so we can just special-case this. While we're here, we also construct the generic context for a generic function lazily, when its signature is accessed, instead of eagerly when inferring the function body. |
||
---|---|---|
.. | ||
classes.md | ||
functions.md | ||
legacy.md | ||
pep695.md | ||
scoping.md | ||
variance.md |