【发布时间】:2014-02-01 06:53:06
【问题描述】:
我目前正在用 Python 编写一个内部抽象层,以帮助我们的开发人员与我们的内部数据存储进行对话,而无需让他们了解细节。
抽象层的某些部分需要各种连接和配置(如路径、数据库连接等),由于我们希望尽可能保持灵活性,我们决定抽象出细节。为此,我创建了一个 Configuration 类,它有一堆未实现的方法来获取内部所需的详细信息:
class Configuration:
def get_mongo_client(self):
"""
:returns: a :py:class:`pymongo.MongoClient` instance that should be used \
for talking to the database
"""
raise NotImplementedError()
# more getters...
现在,假设我有一个 Users 类,它在内部需要一个 Configuration 实例。使它可用的最佳方法是什么?我真的很想*避免将Configuration 作为__init__ 的参数。还有其他方法可以传递吗?我可以使用某种流程本地存储吗?
【问题讨论】:
-
“显式优于隐式”...
-
你为什么不想要它在
__init__? -
这不能回答您的问题 - 但面对同样的问题,我意识到将共享功能尤其是因为它与数据库相关作为内部 (REST) 公开更简单API。这不仅使集成变得轻而易举,而且作为额外的好处,它使跟踪数据存储的使用不再是问题。需要考虑的事情。
标签: python