Найти - Пользователи
Полная версия: Использование asdict модуля dataclasses
Начало » Python для новичков » Использование asdict модуля dataclasses
1
esaul1304
Просьба не смеяться - только учусь.
Задача стоит такая. Имеется класс 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()
py.user.next
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'
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB