我对 Python 有点陌生(但对编程一点也不熟悉,已经精通 Perl、PHP 和 Ruby)。我遇到了我以前的所有语言和 Python 之间的一个主要区别:主要是我可以轻松地将数据从另一个文件读入整个项目。我想解决两个主要的例子:
1)我想要一个设置/配置文件(在 YAML 中),它可以在 config.py 文件中读取和解析。然后我希望项目中的所有其他文件都可以访问生成的 dict() 。我已经弄清楚如何做到这一点,from lib.project.config import cfg但这意味着对于导入配置的每个页面,系统必须重新解析 yaml。这对我来说似乎很愚蠢。有没有办法只解析该文件一次,然后让我的项目中的任何其他文件可以访问结果?
2) 我想导入一个database.py 文件,然后查看我的配置,看看是否需要导入sqlite3、mysql 或postgresql 版本的数据库类。同样,我可以通过将逻辑直接放入需要数据库类的每个页面中来管理此问题。但我讨厌必须粘贴代码
if cfg.get('db_type') == 'sqlite':
from lib.project.databases.sqlite3 import database
elif cfg.get('db_type') == 'mysql':
from lib.project.databases.mysql import database
Run Code Online (Sandbox Code Playgroud)
在每个需要数据库类的文件的顶部。我更愿意添加:
import lib.project.database
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激。我已经做了很多谷歌搜索和 SO 搜索,但没有找到我的答案。希望你们中的一位奇才可以提供帮助。
谢谢。
更新:我这样做的原因(对于#2)是因为我还试图让其他类继承数据库类。所以lib/project/databases/sqlite.py是一个数据库类的定义。lib/project/databases/mysql.py 也是如此。这个想法是,在导入完成后,我可以导入像 users 类这样的类,并像这样定义它:
class user(database):
...
Run Code Online (Sandbox Code Playgroud)
从而继承了数据库类的所有结构和方法。您的建议是简单地根据 sqlite/mysql 逻辑/决策创建一个实例,然后将其传递到需要的地方,这是一个很好的解决方案。但我需要更多...想法?