Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 12, 2022 17:32:34

esaul1304
Зарегистрирован: 2022-02-12
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

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

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

 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()

Отредактировано esaul1304 (Фев. 12, 2022 17:33:14)

Офлайн

#2 Фев. 13, 2022 02:32:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

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

esaul1304
Имеется класс InfoMessage с набором полей. В нем же имеется заготовка информационного сообщения с ключами - наименованиями полей.
Этот .format() не работает.

У форматной строки свои имена полей, которые являются именованными аргументами метода .format() при его вызове
  
>>> class A:
...     a = 1
...     b = 2
...     c = 3
...     def f(self):
...         return '{a}, {b}, {c}'.format(a=self.a, b=self.b, c=self.c)
... 
>>> a = A()
>>> a.f()
'1, 2, 3'
>>>

Также есть синтаксический сахар, введённый в последних версиях питона, который даёт делать то же самое без вызова метода .format()
  
>>> class A:
...     a = 1
...     b = 2
...     c = 3
...     def f(self):
...         return f'{self.a}, {self.b}, {self.c}'
... 
>>> a = A()
>>> a.f()
'1, 2, 3'
>>>



Отредактировано py.user.next (Фев. 13, 2022 02:32:38)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version