我想创建一个config
dataclass
,以简化对特定环境变量的白名单和访问(相对于os.environ['VAR_NAME']
来说,输入config.VAR_NAME
更为简便)。因此,在我的dataclass
的__init__
函数中,我需要忽略未使用的环境变量,但我不知道如何提取默认的__init__
函数,以便用它包装,例如,一个还包括*_
作为其中一个参数的函数。
import os
from dataclasses import dataclass
@dataclass
class Config:
VAR_NAME_1: str
VAR_NAME_2: str
config = Config(**os.environ)
运行此代码会出现 TypeError: __init__() got an unexpected keyword argument 'SOME_DEFAULT_ENV_VAR'
错误。
cls.__annotations__
,而是使用dataclass.fields()
,这样您就可以检查它们的配置(例如忽略init=False
字段)。 - Martijn Pietersinspect.signature()
会返回一个Signature
实例,让你轻松地创建一组可接受的参数名称。 - Martijn Pieterscls.__dataclass_fields__
会更快。性能也可以通过将inspect.signature(cls).parameters
分配给字典推导外的变量来提高。 - tboschi