У меня есть класс структуры данных и класс форматирования таблицы, в котором я хочу отформатировать файл и вывести его. Мне нужна гибкость создания форматеров на лету, если необходимо изменить вывод.
class Row(object):
__slots__ = ('date', 'item', 'expiration', 'price')
def __init__(self, date, item, expiration, price=None):
self.date = date
self.item = item
self.expiration = expiration
self.price = ""
if price:
self.price = price
class Formatter(object):
def row(self, rowdata):
for item in rowdata:
print('<obj date="{date}" item="{item}" exp="{expiration}" price="{price}" />\n').format(**item)
def print_table(objects, colnames, formatter):
for obj in objects:
rowdata = [str(getattr(obj, colname)) for colname in colnames]
formatter.row(rowdata)
Я так называю:
data = [Row("20180101", "Apples", "20180201", 1.50),
Row("20180101", "Pears", "20180201", 1.25)]
formatter = Formatter()
print_table(data, ['date','item','expiration','price'], formatter)
Я ожидаю увидеть:
<obj date="20180101" item="Apples" exp="20180201" price="1.50" />
<obj date="20180101" item="Pears" exp="20180201" price="1.25" />
В настоящее время я получаю следующую ошибку:
TypeError: format() argument after ** must be a mapping, not str
Может кто-нибудь помочь с этим? Спасибо