【问题标题】:Django/Python: Import package with configs project-wideDjango/Python:在项目范围内使用配置导入包
【发布时间】:2018-06-27 10:33:54
【问题描述】:

在我的项目中,我使用了某个包mb,我可以这样配置:

mb.set_useragent("**", "1.0", "**@gmail.com")
mb.set_hostname("http://sss")

现在我正在使用 import mb 导入包,然后在我使用此包的每个文件中进行配置,但我希望能够为包设置上述内容一次并且每次我导入包时都要设置这些配置。

如何以有效的方式实现这一目标?我不想将它包装在一个函数中并返回一个对象,因为那样我将不得不做wrapp_function_name().package_capability("param"),它看起来很丑。

【问题讨论】:

  • 也许,在settings.py初始化它?
  • 肯定想到了,只是不确定这是“Python”方式。

标签: python


【解决方案1】:

您可以使用单例类包装器。简而言之,在单例设计模式中,您将只有一个类中的一个实例,并且每次实例化该类时,它都会返回一个实例。永远做一次。像这样。

class SingletonMb:
instance = None
def __new__(cls, *args, **kwargs):
    if not cls.instance:
        cls.instance = mb
        cls.instance.set_useragent("**", "1.0", "**@gmail.com")
        cls.instance.set_hostname("http://sss")
        return cls.instance
    else:  
        return cls.instance

并且无论何时您想使用已配置的 mb,您都可以使用 SingletonMb(),它指的是由 mb 制成的单个已配置对象。并像这样使用包功能:

configuredMb = SingletonMb()

configuredMb.package_capability("param")

【讨论】:

  • 如果我的回答帮助您将其勾选为正确答案并点赞。
猜你喜欢
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 2014-05-17
相关资源
最近更新 更多