我使用面向对象编程开始了一个项目,但是我在理解一些关于路径的基本规则时遇到了一些麻烦。
这是我项目的树状结构:
Project/
main.py
classes/
Database.py
database/
Project.db
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()
在main.py VS中的实例化在Database.py中
ProjectDatabase = Database('Project')
ProjectDatabase.connect()
如果我在main.py文件中进行实例化并运行它,那么我就不需要更改Database.py文件中的任何内容。
但是,如果我在Database.py文件中进行实例化并运行它,那么我需要将connect方法更改为:
def connect(self):
self.conn = sqlite3.connect('../database/{}.db'.format(self.name))
self.c = self.conn.cursor()
我不明白为什么我需要这样做以及为什么我不必在Database.py中更改sys.path.insert()命令,如果我在main.py中进行实例化file ...为什么不应该只是sys.path.insert(' database /')呢?
我希望我能在这里清楚,我根本不知道应该如何在脚本中编写路径,具体取决于我们打算运行的脚本以及是否有其他嵌入式脚本,例如:课程调用主程序。
感谢您的解释!
答案 0 :(得分:0)
如果您在main.py中初始化,那么main.py文件的目录将成为程序实例的根目录。因此,文件的所有引用都将从main.py文件所在的目录启动。
如果从database.py初始化而不是数据库文件夹目录成为程序实例的根目录,则需要根据数据库文件夹目录引用所有其他文件。
希望这有帮助。