如何在像 Java/Spring 那样调用 class 方法之前设置对象?
How to setup an object before calling class methods like in Java/Spring?
我有一个对象需要通过读取配置文件和环境变量来初始化。它有 class 方法,我想确保在执行 class 方法之前初始化对象。
有没有办法初始化所有这种性质的classes?我的代码中可能会有很多这样的东西。
我来自 Java/Spring 背景,只需将 @Service
放在 class 或 @PostConstruct
之上的初始化方法上即可确保它被调用。如果在正常 Python 中没有一种干净的方法可以做到这一点,是否有框架可以使这更容易?
所以 class 看起来像这样
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()
基本上,当您第一次 import
/加载包含 MyClass
的文件时,它将 运行 __init__
构造函数 一次 因为它是内部的 _instance
。然后可以从所有其他 class 方法访问该实例(单例)。
选项#2。
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
此选项完全避免使用任何 global 代码。然而,它的代价是您的 settings 不再很好地封装在 instance.
中
您始终可以使用简单的单例实现,这听起来就像您正在尝试做的那样。这个 post 有如何做的例子和一些关于你是否真的需要单例的想法。
Is there a simple, elegant way to define singletons?
我有一个对象需要通过读取配置文件和环境变量来初始化。它有 class 方法,我想确保在执行 class 方法之前初始化对象。
有没有办法初始化所有这种性质的classes?我的代码中可能会有很多这样的东西。
我来自 Java/Spring 背景,只需将 @Service
放在 class 或 @PostConstruct
之上的初始化方法上即可确保它被调用。如果在正常 Python 中没有一种干净的方法可以做到这一点,是否有框架可以使这更容易?
所以 class 看起来像这样
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()
基本上,当您第一次 import
/加载包含 MyClass
的文件时,它将 运行 __init__
构造函数 一次 因为它是内部的 _instance
。然后可以从所有其他 class 方法访问该实例(单例)。
选项#2。
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
此选项完全避免使用任何 global 代码。然而,它的代价是您的 settings 不再很好地封装在 instance.
中您始终可以使用简单的单例实现,这听起来就像您正在尝试做的那样。这个 post 有如何做的例子和一些关于你是否真的需要单例的想法。 Is there a simple, elegant way to define singletons?