Closed
Description
Bug description
Home Assistant dropped Python 3.9 this week. While upgrading all runtime annotations to the new union syntax, I discovered some issues with pylint. It seems astroid doesn't know how to handle these.
# pylint: disable=missing-docstring,too-few-public-methods,line-too-long,useless-suppression
from __future__ import annotations
from typing import Generic, TypeVar
T = TypeVar("T")
class Coordinator(Generic[T]):
def __init__(self, update_interval=None) -> None:
self.update_interval = update_interval
class Child(Coordinator[int | str]): # <-- 'int | str' here seems to be the issue
def __init__(self) -> None:
Coordinator.__init__(self, update_interval=2) # non-parent-init-called
def _async_update_data(self):
assert self.update_interval # access-member-before-definition
self.update_interval = 1 # attribute-defined-outside-init
Configuration
[MAIN]
load-plugins=
pylint.extensions.code_style,
pylint.extensions.typing,
py-version=3.10
[TYPING]
runtime-typing=no
Command used
pylint test.py
Pylint output
test.py:16:8: W0233: __init__ method from a non direct base class 'Coordinator' is called (non-parent-init-called)
test.py:19:15: E0203: Access to member 'update_interval' before its definition line 20 (access-member-before-definition)
test.py:20:8: W0201: Attribute 'update_interval' defined outside __init__ (attribute-defined-outside-init)
Expected behavior
No errors
Pylint version
pylint 2.16.0b1
astroid 2.14.0-dev0
Python 3.11.1
OS / Environment
No response
Additional dependencies
No response