Ihre Python-Imports vereinfachen: Wie man nach Klassen und nicht nach Dateien importiert

Bei der Arbeit mit Python, insbesondere in größeren Projekten, wird es entscheidend, die Imports effektiv zu verwalten. Sie könnten feststellen, dass Sie auf Klassen direkt aus ihrem Paket und nicht aus ihren jeweiligen Dateien zugreifen möchten. Diese Methode kann Ihren Code sauberer und leichter lesbar machen. In diesem Blogbeitrag werden wir behandeln, wie Sie dies in Ihren Python-Projekten mit einer einfachen Struktur erreichen können.

Das Problem

Betrachten Sie die folgende Verzeichnisstruktur für Ihre Python-Anwendung:

app/
  app.py
  controllers/
    __init__.py
    project.py
    plugin.py

In diesem Fall würde das Importieren einer Klasse Project, die in project.py definiert ist, in app.py traditionell so aussehen:

from app.controllers.project import Project

Was aber, wenn Sie möchten, dass Ihre Importanweisung kürzer und sauberer ist? Sie könnten es wünschen, so zu importieren:

from app.controllers import Project

Dies vereinfacht nicht nur Ihre Importanweisungen, sondern hält auch Ihren Code angenehm organisiert. Die Frage stellt sich: Wie können Sie dies einrichten?

Die Lösung

Um Ihren Importprozess zu optimieren und das Importieren von Klassen direkt aus einem Paket zu ermöglichen, müssen Sie eine kleine Änderung in Ihrer __init__.py-Datei im Verzeichnis controllers vornehmen.

Schritt-für-Schritt-Anleitung

  1. Öffnen Sie die __init__.py-Datei: Diese Datei wird normalerweise verwendet, um Ihr Python-Paket zu initialisieren, und ermöglicht es Ihnen zu steuern, was importiert wird, wenn Sie das Paket selbst importieren.

  2. Fügen Sie die Importanweisung hinzu: Um die Klasse Project direkt aus controllers importieren zu können, fügen Sie die folgende Zeile zu Ihrer __init__.py hinzu:

    from project import Project
    

    Dies teilt Python mit, die Klasse Project automatisch aus project.py zu importieren, wenn Sie das Paket controllers importieren.

  3. Anpassung an absolute Imports: Mit der Einführung von Python 2.7 und darüber hinaus werden absolute Imports zum Standardmodus für Imports. Um mögliche Konflikte mit einem Top-Level-Modul zu vermeiden, das versehentlich einen Namen teilen könnte (wie project), ist es vorteilhaft, einen Punkt hinzuzufügen, um einen relativen Import anzuzeigen. Daher würden Sie Ihren Import in __init__.py ändern zu:

    from .project import Project
    

    Dies zeigt an, dass die Klasse Project aus dem aktuellen Paket (controllers) importiert wird.

Wichtige Erkenntnisse

  • Durch die Modifikation Ihrer __init__.py vereinfachen Sie Ihre Imports erheblich.
  • Die Verwendung des Punktes (.) vor dem Modulumnamen stellt sicher, dass Sie auf das korrekte Modul verweisen, was besonders nützlich in größeren Anwendungen mit möglichen Namenskonflikten ist.
  • Diese Praxis verbessert nicht nur die Lesbarkeit Ihres Codes, sondern hilft Ihnen auch, eine klare Struktur zu bewahren, während Ihr Projekt wächst.

Fazit

Wenn Sie die einfachen Schritte aus diesem Beitrag befolgen, können Sie Ihre Python-Coding-Praktiken verbessern, indem Sie Ihre Imports unkomplizierter gestalten. Diese Technik spart nicht nur Zeit, sondern trägt auch zu sauberem, wartbarem Code bei. Denken Sie daran: Eine gut strukturierte Anwendung beginnt mit der effektiven Verwaltung Ihrer Imports!

Fühlen Sie sich frei, diesen Ansatz in Ihren eigenen Projekten auszuprobieren und zu sehen, welchen Unterschied er macht!