-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Open
Labels
Description
There is currently a safety check around TypeVar
-dependent Final
attributes declared in the class body that I believe we can loosen when the variable is assigned in the ctor. This should work analogously to non-TypeVar
-dependent final attributes declared in the class body, which also require an assignment in the ctor (otherwise they emit "Final name must be initialized with a value").
- Are you reporting a bug, or opening a feature request? feature request
- Please insert below the code you are checking with mypy,
or a mock-up repro if the source is private. We would appreciate
if you try to simplify your case to a minimal repro.from typing import Final, Generic, TypeVar WidgetT = TypeVar('WidgetT', bound='Widget') class Widget: pass class WidgetHolder(Generic[WidgetT]): widget: Final[WidgetT] def __init__(self, widget: WidgetT) -> None: self.widget = widget
- What is the actual behavior/output?
final.py: note: In class "WidgetHolder": final.py:13:5: error: Final name declared in class body cannot depend on type variables [misc] widget: Final[WidgetT] ^
In case anyone comes across this issue, the workaround is currently to not declare in the class body, but declare in the ctor with self.widget: Final[WidgetT] = widget
instead. But just because a workaround exists doesn't mean we shouldn't try to fix this.
Kangaroux, alexdelorenzo, daniil-berg, way-dave, AgarwalPragy and 2 moreDeric-W and dtoniolo