我们假设在一个模块中有以下简约python类,例如: Module
:
module/
__init__.py
db.py
document.py
db.py
import yaml
class DB(object):
config = {}
@classmethod
def load_config(cls, config_path):
cls.config = yaml.load(open(config_path, 'r').read())
和document.py
from .db import DB
class Document(object):
db = None
def __init__(self):
self.db = DB()
最终用户将使用如下Module
:
from Module import DB, Document
DB.load_config('/path/to/config.yml')
Document.do_some_stuff()
doc1 = Document()
doc2 = Document.find(...)
doc2.update_something(...)
doc2.save()
预期Document
类及其每个实例都将在内部访问具有user指定的配置的类DB
。但是,由于Document
执行DB
类(from .db import DB
)的内部导入,因此会收到一个带有默认配置的“新”DB
类。
我做了很多搜索,大多数问题和答案都是关于模块范围的配置,但最终用户没有指定。
我如何实现这样的功能?我想这里存在一些架构问题,但解决它的最简单方法是什么?