我正在尝试使用python的新特性(数据类)。我试图初始化变量并得到错误:
raise ValueError(f'mutable default {type(f.default)} for field '
ValueError: mutable default <class 'dict'> for field headers is not allowed: use default_factory
我的代码:
@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()
初始化字典的正确方法是什么?
发布于 2022-06-16 07:28:07
对于定义复杂字段,Dataclasses有一些有用的东西。您需要的是一个名为字段。这里有一个需要接受可调用的参数default_factory
,而lambda
正是在这里来拯救它的。因此,使用上面的代码,将工作的代码看起来像(只是与dict的一部分):
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'}
)
https://stackoverflow.com/questions/72630488
复制相似问题