Сопоставьте словарь ConfigParser с конструктором класса с правильными типами значений

У меня есть файл конфигурации ini, который выглядит следующим образом:

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

И у меня есть класс Python с именем User с конструктором __init__ ниже:

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 имеет такие методы, как getfloat, getint, getboolean. Я мог бы использовать эти методы и получить правильный тип данных для каждого параметра.

Однако для этого мне потребуется передать каждый параметр конструктору User. Это может быть проблематично, когда мне нужно добавить/удалить параметр для конструктора User

Можно ли использовать user = User(**config["user"]) в конструкторе и настроить ConfigParser для преобразования значения в правильные типы данных?

Спасибо.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
15
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это становится тривиальным, если вы используете что-то вроде пидантический:

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'>

Другие вопросы по теме