HomeAssistant Programmierung (dunder) future (dunder)
__future__ ist kein Bestandteil von Home Assistant selbst, sondern ein spezielles Python-Modul. Es ermoeglicht, Sprachfunktionen einer neueren Python-Version bereits in aelteren Python-Versionen zu verwenden.
Beispiel:
from __future__ import annotations
Das wirst du in fast jeder modernen Home-Assistant-Integration ganz oben in der Datei finden.
Was bewirkt annotations?
Nehmen wir dieses Beispiel:
class FoxAPI:
pass
class Coordinator:
def __init__(self, api: FoxAPI):
self.api = api
Ohne
from __future__ import annotations
muss Python beim Einlesen der Datei bereits wissen, was FoxAPI ist.
Mit
from __future__ import annotations
werden alle Typangaben zunächst nur als Zeichenketten gespeichert und erst später ausgewertet.
Dadurch funktionieren auch sogenannte Forward References:
from __future__ import annotations
class A:
def test(self) -> B:
...
Obwohl B erst später definiert wird:
class B:
pass
Ohne __future__ würde das einen Fehler erzeugen.
Warum nutzt Home Assistant das?
Home Assistant verwendet sehr viele Typannotationen:
from homeassistant.core import HomeAssistant
from homeassistant.config_entries import ConfigEntry
async def async_setup_entry(
hass: HomeAssistant,
entry: ConfigEntry,
) -> bool:
...
Ebenso häufig findet man:
class FoxCoordinator(DataUpdateCoordinator[dict[str, Any]]):
...
oder
def __init__(
self,
coordinator: FoxCoordinator,
) -> None:
Mit
from __future__ import annotations
- werden Importabhängigkeiten reduziert,
- entstehen weniger zyklische Importe,
- verbessert sich die Performance beim Laden,
- und der Code wird einfacher wartbar.
Warum steht der Import immer ganz oben?
Python verlangt, dass alle __future__-Importe vor allen anderen Imports stehen:
from __future__ import annotations
import logging
from homeassistant.core import HomeAssistant
Das ist Pflicht.
Brauche ich das für eine neue Integration?
Ja.
Wenn du heute eine neue Home-Assistant-Integration schreibst, solltest du grundsätzlich jede Python-Datei mit
from __future__ import annotations
beginnen.
Das entspricht dem Stil des Home-Assistant-Core-Projekts und erleichtert den Einsatz moderner Typannotationen.
Wird das in Zukunft noch benoetigt?
Home Assistant setzt inzwischen auf aktuelle Python-Versionen. Seit Python 3.14 werden verzoegert ausgewertete Annotationen standardmaeszig unterstuetzt, sodass from __future__ import annotations langfristig ueberfluessig werden wird.
Bis dahin gilt jedoch:
- Für Home-Assistant-Integrationen: weiter verwenden.
- Für neuen Home-Assistant-Code: praktisch Standard.
- Für aeltere Tutorials: Wenn der Import fehlt, ist der Code oft älter oder richtet sich an fruehere Python-Versionen.
Man solltedie Codezeile unbedingt in jeder eigenen Home-Assistant-Geraeteintegrationen konsequent .py-Datei verwenden.