【发布时间】:2017-12-04 14:54:10
【问题描述】:
让我们假设,在一个模块中有以下简约的 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 类及其每个实例都将在内部使用用户指定的配置访问类DB。但是,由于 Document 执行 DB 类 (from .db import DB) 的内部导入,它会收到一个带有默认配置的“新鲜”DB 类。
我做了很多搜索,大部分问题和答案都是关于模块范围的配置,但最终用户没有指定。
我怎样才能实现这样的功能?我猜这里存在一些架构问题,但最简单的解决方法是什么?
【问题讨论】:
标签: python oop inheritance module package