Lesen aller in * .py enthaltenen Klassen in dem von Python angegebenen Verzeichnis

Dies ist eine Methode zum Speichern von Plugins usw. in einem bestimmten Verzeichnis und zum Importieren aller * .py-Dateien in dieses Verzeichnis, ohne einzelne Dateien im Code anzugeben.

Nehmen Sie die folgende Verzeichnisstruktur an.

./loader.py
./plugins
./plugins/__init__.py
./plugins/a.py
./plugins/b.py

__init __. py ist leer und OK. a.py und b.py sind vorerst so.

a.py


#!/usr/bin/env python
# coding: utf-8

class Plugin1:
    ''' plugin1 '''

class Plugin2:
    ''' plugin2 '''

b.py


#!/usr/bin/env python
# coding: utf-8

class Plugin3:
    ''' plugin3 '''

Schreiben Sie loader.py wie folgt.

loader.py


#!/usr/bin/env python
# coding: utf-8

import os
import inspect
import importlib
import glob

def load_classes(dname):
    class_list = []

    # *.Laden Sie py
    for fpath in glob.glob(os.path.join(dname, '*.py')):
        #Entfernen Sie das Trennzeichen für Erweiterung und Dateipfad(Für Unix'/')Zu'.'Ersetzen mit
        cpath = os.path.splitext(fpath)[0].replace(os.path.sep, '.')
        #Als Modul laden
        mod = importlib.import_module(cpath)
        #Rufen Sie die im geladenen Modul enthaltene Klasse auf
        for cls_name, cls in inspect.getmembers(mod, inspect.isclass):
            # (Klassenname einschließlich Verzeichnispfad,Klassenkörper)Im Format gespeichert
            class_list.append(('{0}.{1}'.format(cpath, cls_name), cls))

    return class_list
        

import pprint
clist = load_classes('plugins')
pprint.pprint(clist)

Das Ausführungsergebnis ist wie folgt.

$ ./loader.py
[('plugins.a.Plugin1', <class plugins.a.Plugin1 at 0x10d2538d8>),
 ('plugins.a.Plugin2', <class plugins.a.Plugin2 at 0x10d253940>),
 ('plugins.b.Plugin3', <class plugins.b.Plugin3 at 0x10d2539a8>)]

Das zweite Element der Liste ist der Klassenkörper, mit dem Sie eine Instanz erstellen können.

c = clist[0][1]()
print c
# <plugins.a.Plugin1 instance at 0x107195d40>

Recommended Posts

Lesen aller in * .py enthaltenen Klassen in dem von Python angegebenen Verzeichnis
Wie Sie das aktuelle Verzeichnis in Python in Blender kennen
So wechseln Sie die Konfigurationsdatei, die von Python gelesen werden soll
Verwendung von Sternchen (*) in Python. Vielleicht ist das alles? ..
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei Zeile für Zeile mit Python
[Python] Lesen Sie die angegebene Zeile in der Datei
Sortieren durch Angabe einer Spalte im Python Numpy-Array.
Verwendung der C-Bibliothek in Python
So löschen Sie die von Python ausgegebenen Zeichen
So erhalten Sie die Dateien im Ordner [Python]
So lesen Sie Dateien in verschiedenen Verzeichnissen
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
So erhalten Sie den Variablennamen selbst in Python
So ermitteln Sie die Anzahl der Stellen in Python
[Wiedereinführung in Python] Importieren über das übergeordnete Verzeichnis
Lesen Sie die XML-Datei anhand des Python-Tutorials
Verwendung des in Lobe in Python erlernten Modells
[Python] So geben Sie Listenwerte der Reihe nach aus
Lesen von CSVs, die in Python nur Ganzzahlen enthalten
So listen Sie Dateien im angegebenen Verzeichnis auf (Suche nach mehreren Bedingungen / Unterverzeichnissen)
Wie man in Python entwickelt
[Python] So überprüfen Sie, ob der Schlüssel im Wörterbuch vorhanden ist
[Python] Öffnen Sie die CSV-Datei in dem von Pandas angegebenen Ordner
So debuggen Sie eine Standard-Python-Bibliothek in Visual Studio
Verwendung der Methode __call__ in der Python-Klasse
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
So erhalten Sie alle Schlüssel und Werte im Wörterbuch
Lesen von Text mit Standardeingabe oder Dateinamen wie cat in Python
Python> Bibliothek> Betriebssystem> os.walk ()> Verzeichnisstruktur / Implementierung abrufen, um jeden Dateipfad im angegebenen Verzeichnis abzurufen
So überprüfen Sie anhand des Hashwerts, ob der Inhalt des Wörterbuchs in Python identisch ist
Verwendung von Klassen in Theano
So sammeln Sie Bilder in Python
Verwendung von SQLite in Python
Im Python-Befehl zeigt Python auf Python3.8
Lesen des SNLI-Datensatzes
So erhalten Sie die Python-Version
Wie man MySQL mit Python benutzt
So verpacken Sie C in Python
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
Umgang mit Japanisch mit Python
So bestimmen Sie die Existenz eines Selenelements in Python
So erhalten Sie alle möglichen Werte in einem regulären Ausdruck
Das 15. Offline-Echtzeit-Schreiben eines Referenzproblems in Python
17. Offline-Echtzeit So lösen Sie Schreibprobleme mit Python
So überprüfen Sie die Speichergröße einer Variablen in Python
So stellen Sie fest, dass in Python3 ein Kreuzschlüssel eingegeben wurde
Lesen Sie die Standardausgabe eines Unterprozesses zeilenweise in Python
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Das 14. Referenzproblem beim Schreiben in Echtzeit in Python
So löschen Sie mehrere angegebene Positionen (Indizes) in einer Python-Liste
[Anfängernotiz] So legen Sie den Lesepfad der Bibliothek in Python fest
Das 18. Offline-Echtzeit-Schreiben eines Referenzproblems in Python
So zeigen Sie Bytes in Java und Python auf die gleiche Weise an
[Python Kivy] So erhalten Sie den Dateipfad durch Ziehen und Ablegen
[Einführung in Python] Wie verwende ich eine Klasse in Python?
17. In Python implementiertes Referenzproblem für das Offline-Schreiben in Echtzeit
Wie man pydoc auf Python Interpreter liest