How does one ignore extra arguments passed to a data class?

后端 未结 3 1320
南旧
南旧 2020-12-11 01:37

I\'d like to create a config dataclass in order to simplify whitelisting of and access to specific environment variables (typing os.environ[\

3条回答
  •  长情又很酷
    2020-12-11 02:29

    I would just provide an explicit __init__ instead of using the autogenerated one. The body of the loop only sets recognized value, ignoring unexpected ones.

    Note that this won't complain about missing values without defaults until later, though.

    @dataclass
    class Config(init=False):
        VAR_NAME_1: str
        VAR_NAME_2: str
    
        def __init__(self, **kwargs):
            names = set([f.name for f in dataclasses.fields(self)])
            for k, v in kwargs.items():
                if k in names:
                    setattr(self, k, v)
    

    Alternatively, you can pass a filtered environment to the default Config.__init__.

    field_names = set(f.name for f in dataclasses.fields(Config))
    c = Config(**{k:v for k,v in os.environ.items() if k in field_names})
    

提交回复
热议问题