У меня есть файл конфигурации 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
для преобразования значения в правильные типы данных?
Спасибо.
Это становится тривиальным, если вы используете что-то вроде пидантический:
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'>