Использование asdict модуля dataclasses

esaul1304

Новичок
Пользователь
Фев 12, 2022
4
1
3
Нужна помощь!
Задача стоит такая. Имеется класс InfoMessage с набором полей. В нем же имеется заготовка информационного сообщения с ключами - наименованиями полей.
Необходимо, используя asdict модуля dataclasses, создать словарь, содержащий поля и значения экземпляра класса, распаковать его и с помощью функции get_message вернуть строку информационного сообщения и при этом применить форматирование .format.
Вот собственно:

Python:
from dataclasses import asdict, dataclass
@dataclass
class InfoMessage:
    var_1: str
    var_2: float
    var_3: float
    var_4: float
    INFO = (
        'Текст: {var_1}; текст: {var_2:.3f}; '
        'текст: {var_3:.3f}; текст: {var_4:.3f}; '
    )
    def get_message(self):
        return self.INFO.format()
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
передай в format
var_1=self.var_1
и так для всех var
 

esaul1304

Новичок
Пользователь
Фев 12, 2022
4
1
3
передай в format
var_1=self.var_1
и так для всех var
Изначально я что-то подобное и сделал. Но так как в коде я использую dataclasses, то мне поставлена задача использовать преимущества этого модуля с помощью asdict и распаковки.
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Изначально я что-то подобное и сделал. Но так как в коде я использую dataclasses, то мне поставлена задача использовать преимущества этого модуля с помощью asdict и распаковки.
А понял, прикольно. Передай в format **asdict(self)
 
  • Мне нравится
Реакции: esaul1304

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Это какой-то Хогвардс!!! Так просто? Буду разбираться как это работает, а то не поверят. Спасибо!

asdict(self) возвращает словарь из объекта
То есть у тебя словарь {'var_1': 1, 'var_2': 2, 'var_3': 3, 'var_4': 4}
Потом ты его распаковываешь, то есть передаешь словарь как отдельные аргументы

Python:
# То есть это:
d.format(var_1=1, var_2=2, var_3=3, var_4=4)

# Равносильно этому
di = {'var_1': 1, 'var_2': 2, 'var_3': 3, 'var_4': 4}
d.format(**di)
 
  • Мне нравится
Реакции: esaul1304

esaul1304

Новичок
Пользователь
Фев 12, 2022
4
1
3
asdict(self) возвращает словарь из объекта
То есть у тебя словарь {'var_1': 1, 'var_2': 2, 'var_3': 3, 'var_4': 4}
Потом ты его распаковываешь, то есть передаешь словарь как отдельные аргументы

Python:
# То есть это:
d.format(var_1=1, var_2=2, var_3=3, var_4=4)

# Равносильно этому
di = {'var_1': 1, 'var_2': 2, 'var_3': 3, 'var_4': 4}
d.format(**di)
Круто.
 

esaul1304

Новичок
Пользователь
Фев 12, 2022
4
1
3
А понял, прикольно. Передай в format **asdict(self)
Это какой-то Хогвардс!!! Так просто? Буду разбираться как это работает, а то не поверят. Спасибо!
 
  • Мне нравится
Реакции: Vershitel_sudeb

Форум IT Специалистов