2017-12-31 122 views
-1

Ich habe ein Projekt mit Object Oriented Programming gestartet, aber ich habe ein wenig Schwierigkeiten, einige grundlegende Regeln über Pfade zu verstehen.Python Pfadregeln

Hier ist die arborescence meines Projekts:

main.py

import sys 
sys.path.insert(0, 'classes/') 
from Database import Database 

Database.py

import sys 
sys.path.insert(0, '../database/') 
import sqlite3 

# in my Database class 
def connect(self): 
    self.conn = sqlite3.connect('database/{}.db'.format(self.name)) 
    self.c = self.conn.cursor() 

Instanziierung in main.py VS in Database.py

ProjectDatabase = Database('Project') 
ProjectDatabase.connect() 

Wenn ich die Instanziierung in der main.py Datei machen und führen Sie es dann muss ich nicht alles in der Datei Database.py ändern.

Aber wenn ich die Instanziierung in der Database.py Datei machen und führen Sie es dann muss ich die Connect-Methode dies ändern:

def connect(self): 
    self.conn = sqlite3.connect('../database/{}.db'.format(self.name)) 
    self.c = self.conn.cursor() 

Ich verstehe nicht, warum ich tun muss, dass und Warum muss ich den sys.path.insert() - Befehl in Database.py nicht ändern, wenn ich die Instanziierung in der Datei main.py mache ... Warum sollte es nicht nur sys.path.insert ('database /') stattdessen ?

Ich hoffe, ich bin hier klar, ich bekomme einfach nicht, wie wir Pfade in unseren Skripten schreiben sollten abhängig davon, welches Skript wir ausführen wollen und abhängig davon, ob eingebettete Skripte in andere wie Klassen Aufruf sind ein Hauptprogramm.

Danke für Ihre Erklärungen!

+0

Ich würde empfehlen zu lesen https://docs.python.org/3/tutorial/modules.html#packages – jonrsharpe

Antwort

0

Wenn Sie in main.py initialisieren, wird das Verzeichnis Ihrer main.py-Datei zum Stammverzeichnis der Programminstanz. Daher wird der gesamte Verweis für die Dateien aus dem Verzeichnis initiiert, in dem sich die main.py-Datei befindet.

Wenn Sie von database.py initialisieren, wird Ihr Datenbankordnerverzeichnis zum Stammverzeichnis für Ihre Programminstanz, und Sie müssen auf alle anderen Dateien entsprechend dem Verzeichnis des Datenbankordners verweisen.

Hoffe, das hilft.

+0

Sie meinen, wenn ich mein Skript main.py dann alle Pfade zu anderen Dateien (und in anderen Dateien), muss in dem Ordner angegeben werden, der mein main.py-Skript enthält, was im Projekt/Ordner angegeben ist. Aber wenn ich das Database.py-Skript ausführe, dann ist es mein Klassen/Ordner, der zum Stamm für mein Programm wird, also sollte alles von dort spezifiziert werden. Recht ? Das erklärt nicht, warum ich, wenn ich main.py benutze, sys.path.insert ('../ database /') am Anfang von Database.py belassen kann, es sollte sys.path.insert ('database /') theoretisch. Nein ? – SlickKiss

+0

Immer, wenn Sie sys.path in der Datei verwenden, verwendet es die Systemdateipfadreferenz. Wenn also database.py von einer anderen Datei initiiert wird, verweist sys.path auf den Ordner database.py für alle seine Instanzen. Daher müssen Sie ../database angeben, um zum Datenbankordner aus dem Klassenordner und zurückzugehen. Ich würde vorschlagen, dass Sie importieren, um das erforderliche Modul aus database.py zu bekommen zB: "import classes.database" –

+0

Ich verstehe es wirklich nicht. Haben Sie Online-Ressourcen darüber reden, ich habe gesucht, aber je mehr ich lese desto weniger verstehe ich. – SlickKiss