python - 将 ConfigParser 字典映射到具有正确值类型的类构造函数

标签 python python-3.x dictionary configparser

我有一个配置 ini 文件,如下所示:

[user]
name=john
sex=male
age=19
income=2345.99

我有一个名为 User 的 Python 类,其构造函数如下:

class User:
    def __init__(self, name: str, sex: str, age: int, income: float):
        self.__name = name
        self.__sex = sex
        self.__age = age
        self.__income = income

当我使用ConfigParser读取ini文件并将configparser字典传递给User构造函数时,字典中的值是字符串。

config = ConfigParser()
config.read('test.ini')
user = User(**config["user"])

ConfigParser 具有诸如 getfloatgetintgetboolean 等方法。我可以使用这些方法并为每个参数获取正确的数据类型。

但是,这需要我将每个参数传递给 User 构造函数。每当我需要为 User 构造函数添加/删除参数时,这都会很麻烦

是否可以在构造函数中使用 user = User(**config["user"]) 并配置 ConfigParser 将值转换为正确的数据类型?

最佳答案

如果您使用类似 pydantic 的内容,这将变得微不足道。 :

import pydantic
import configparser


class User(pydantic.BaseModel):
    name: str
    sex: str
    age: int
    income: float


config = configparser.ConfigParser()
with open("config.ini") as fd:
    config.read_file(fd)

user = User(**config["user"])

此时,配置文件中的字符串值已转换为适当的数据类型:

>>> type(user.income)
<class 'float'>

关于python - 将 ConfigParser 字典映射到具有正确值类型的类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71691352/

相关文章:

python - 为 PyLint 输出着色?

python - "datetime.date"类型的对象在python中没有len()”

python - 属性错误 : 'str' object has no attribute 'items'

swift - 为什么我无法转换混合类型字典的值并更新该值?

Python XML 解析和 getElementsByTagName

python - re.DOTALL 适用于 re.match 但不适用于 re.sub?

python - 使用 XlsxWriter 分配 Excel 图表对象名称

python - 如何在 __new__ 中正确构建一个具有 type(3 args) 和 2 个祖先的类?

python - 如何修改 Django Admin 上的选择

python - 使用 for 循环填充字典