我已经开始使用面向对象编程的项目,但是我在理解一些关于路径的基本规则时遇到了一些麻烦。
这是我项目的树状结构:
Project/
main.py
classes/
Database.py
database/
Project.db
卖弄.朋友
import sys
sys.path.insert(0, 'classes/')
from Database import Database
database.朋友
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()
在Database.py中的main.py VS中实例化
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文件中进行实例化...为什么不应该'它只是sys.path.insert('database /')而已?
我希望我在这里清楚,我只是不知道我们应该如何根据我们打算运行的脚本在脚本中编写路径,并且取决于是否有其他嵌入式脚本,例如类调用主程序。
谢谢你的解释!
如果您在main.py中初始化,那么main.py文件的目录将成为程序实例的根目录。因此,文件的所有引用都将从main.py文件所在的目录启动。
如果从database.py初始化,则数据库文件夹目录将成为程序实例的根目录,并且需要根据数据库文件夹目录引用所有其他文件。
希望这可以帮助。