首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ValueError:不允许字段头的可变默认值<class 'dict'>:使用default_factory

ValueError:不允许字段头的可变默认值<class 'dict'>:使用default_factory
EN

Stack Overflow用户
提问于 2022-06-15 11:25:44
回答 1查看 2.7K关注 0票数 1

我正在尝试使用python的新特性(数据类)。我试图初始化变量并得到错误:

代码语言:javascript
运行
复制
raise ValueError(f'mutable default {type(f.default)} for field '
ValueError: mutable default <class 'dict'> for field headers is not allowed: use default_factory

我的代码:

代码语言:javascript
运行
复制
@dataclass
class Application():
    __config = ConfigParser()
    __config.read('mydb.ini')
    __host: str = __config.get('db','dbhost')
    __user: str = __config.get('db','dbuser')
    __password: str = __config.get('db','dbpw')
    __database: str = __config.get('db','database')
    url: str = "https://xxxx.domain.com/"
    headers: str = {'X-ApiKeys':'accessKey=xxxxxxx;secretKey=xxxxx','Content-Type': 'application/json'}



def main(self):
    print(self.__host,self.__user,self.__password, self.__database)
   


app = Application()
if __name__=="__main__":
    app.main()

初始化字典的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-16 07:28:07

对于定义复杂字段,Dataclasses有一些有用的东西。您需要的是一个名为字段。这里有一个需要接受可调用的参数default_factory,而lambda正是在这里来拯救它的。因此,使用上面的代码,将工作的代码看起来像(只是与dict的一部分):

代码语言:javascript
运行
复制
from dataclasses import field
from typing import Dict

@dataclass
class Application():
    ...
    headers: Dict[str, str] = field(
        default_factory=lambda: {'X-ApiKeys':'accessKey=xxxxxxx;secretKey=xxxxx','Content-Type': 'application/json'}
    )
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72630488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档