Nicht Importieren können Python-Klasse
Ich habe ein Problem mit Python importiert. Ich erstellt ein Modul, um bequem importieren ein paar Klassen innerhalb des Moduls mit einer einzigen Anweisung. Habe ich alle meine Importe innerhalb des init-Baustein, aber es scheint nicht zu funktionieren.
maindir\
- driver.py
- Utility\
- __init__.py
- UtilityClasses.py
Meine Ordner Struktur sieht aus wie der oben.
Innerhalb von UtilityClasses ich habe eine eine Klasse, die habe ich erstellt namens MyClass.
Innerhalb der init-Datei in den Dienstprogramm-Ordner, ich habe code, der sagt:
import UtilityClasses
from UtilityClasses import MyClass
Innerhalb von driver.py ich habe code, der sagt:
import Utility
myVar = MyClass(param1)
Jedoch, wenn ich diese ausführe, bekomme ich die Fehlermeldung sagt mir, dass der name "MyClass" ist nicht definiert.
- warum nicht einfach
from Utility.UtilityClasses import MyClass
? in driver.py - es gibt eine Reihe von UtilitiyClasses und Funktionen, die ich verwenden möchten, während des gesamten Projekts und wurde in der Hoffnung zu tun import-Dienstprogramm als eine praktische Abkürzung, so dass die Spitze der Fahrer (und andere) Dateien, die nicht voll sind
- Importieren Sie alles mit
*
, siehe meine Antwort. - Es kann sich lohnen, brechen diese in unterschiedliche Gebrauchsmuster betrifft. Sie möchten nicht auf eine einzige Klasse für alles verantwortlich wie es wird es schwieriger machen, zu Lesen, wie Sie weiter entlang.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In
__init__.py
, die Sie tun können,Dies wird importieren Sie alles aus
UtilityClasses.py
undSomeOtherFile.py
., Aber Sie haben noch Zugriff auf die Modul-nameUpdate: Sie können auf alles wie dieser
In
driver.py
:Ihren code
natürlich nicht funktionieren --
MyClass
ist nirgends erwähnt und es wird nicht magisch aus dem nichts. Explizit ist besser als implizit:funktioniert wie ein Charme!
import Utility
JE verschmutzen der Import namespace mit anderen barenames -- das ist NICHT Python! (Und ein großer Teil der Grund, warum ich Liebe Python und strukturiert haben meine Karriere und mein ganzes Leben so viel um ihn herum: explizit ist besser als implizit). Wenn du daran interessiert bist, für schwarz-Magische "action at a distance" Sprachen mit namespaces auf mysteriöse Weise verunreinigt mit barenames nie explizit genannt, nur über alle die Sprache, SONDERN auch Python, und möge der wind in deinem Rücken!