我的班级看起来像这样:
class MyConfig(BaseSettings):
model_config = SettingsConfigDict(
env_file=get_configs(),
)
我没有意识到我的
get_configs()
似乎在导入时被调用。当我在该函数中遇到错误并且 pytest 集合失败时,我发现了这一点。
这是 python 行为还是特定于
model_config
类的 BaseSettings
属性如何工作?这对我来说没有意义,因为我希望只有在执行实际实例化 get_configs()
的代码时才会调用我的 MyConfig
函数。
对于任何类来说,这是正常的 Python 行为。 Python 执行类定义的主体与执行模块级代码相同 - 考虑到它位于类内的事实。例如,在模块级别,函数定义(例如
def foo(): return 1
)将已编译的函数绑定到模块命名空间中的名称“foo”。在类定义中,方法(例如,def foo(self): return 1
)中,函数对象绑定到类命名空间中的“foo”。
在您的情况下,类级别“model_config”被分配函数调用的结果。