HomeAssistant Programmierung (dunder) future (dunder)

Aus TippvomTibb
Zur Navigation springen Zur Suche springen

__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.