Python 在调用Java/Spring中的类方法之前,如何设置对象?

Python 在调用Java/Spring中的类方法之前,如何设置对象?,python,python-2.7,initialization,class-method,Python,Python 2.7,Initialization,Class Method,我有一个需要通过读取配置文件和环境变量来初始化的对象。它有类方法,我想确保在执行类方法之前初始化对象 有没有办法初始化所有此类性质的类?我的代码中可能会有很多这样的代码。 我来自Java/Spring的背景,只要将@Service放在类的顶部,或者将@PostConstruct放在初始化器方法上,就可以确保调用它。如果在普通Python中没有一种干净的方法可以做到这一点,那么是否有一个框架可以使这一点变得更容易 这门课看起来像这样 class MyClass(object): def s

我有一个需要通过读取配置文件和环境变量来初始化的对象。它有类方法,我想确保在执行类方法之前初始化对象

有没有办法初始化所有此类性质的类?我的代码中可能会有很多这样的代码。 我来自Java/Spring的背景,只要将
@Service
放在类的顶部,或者将
@PostConstruct
放在初始化器方法上,就可以确保调用它。如果在普通Python中没有一种干净的方法可以做到这一点,那么是否有一个框架可以使这一点变得更容易

这门课看起来像这样

class MyClass(object):
    def setup(self):
        # read variables from the environment and config files

    @classmethod
    def my_method(cls, params):
        # run some code based on params and variables initialised during setup
是。

class MyClass(object):
    def __init__(self): #instead of setup()
        # read variables from the environment and config files

    @classmethod
    def my_method(cls, params):
        # run some code based on params and variables initialised during setup
MyClass._instance=MyClass()
基本上,当您第一次
导入
/加载包含
MyClass
的文件时,它将为其内部
\u实例
运行一次
\u初始化
构造函数。然后,该实例(单例)将可从所有其他类方法访问。

选项#2。


此选项完全避免使用任何全局代码。然而,代价是您的设置不再被很好地封装在一个实例中

您可以始终使用一个简单的单例实现,这听起来就像您正在尝试做的。这篇文章举例说明了如何做到这一点,以及你是否真的需要单身人士的一些想法。

那么您确定需要这些方法作为类方法吗?听起来你有一些状态需要在这里管理。这是一个全局状态,比如代码运行在特定环境中的数据库端点和url。让
setup
也成为一个类方法,总是调用它,让该方法检查是否已经设置了全局?如果_uname\uuu==“\uu主\uuuuuu”,你有什么理由不能有一个
block哪个调用/does
setup()
?尽管如此,我还是会将其封装在一个类中,我创建了一个实例。您所做的只是为全局名称空间命名
global\u var
MyClass.\u namespaced\u var
差别不大。
class MyClass(object):
    # No setup()
    setting_A="foo"
    setting_B="bar"
    dict_of_settings={"foo":"bar"}
    # basically you can define some class variables here

    @classmethod
    def my_method(cls, params):
        print cls.setting_B # etc