Элегантные способы распечатки атрибутов экземпляра в Python 2.6?

StackOverflow https://stackoverflow.com/questions/2997010

  •  24-10-2019
  •  | 
  •  

Вопрос

Сначала немного фона. Я анализирую простой формат файла и хочу повторно использовать результаты в коде Python позже, поэтому я сделал очень простую иерархию класса и написал синтаксический анализатор для создания объектов из исходных записей в текстовых файлах, с которыми я работаю Анкет

В то же время я хотел бы загрузить данные в устаревшую базу данных, файлы Loader, для которых принимают простой формат, разделенный вкладками. Самый простой способ - просто сделать что -то вроде:

print "{0}\t{1}\t....".format(record.id, record.attr1, len(record.attr1), ...)

Поскольку есть так много столбцов для распечатки, я думал, что использую Template класс, чтобы немного легче увидеть, что есть, т.е.

templ = Template("$id\t$attr1\t$attr1_len\t...")

И я подумал, что могу просто использовать запись вместо карты, используемой substitute Вызов, с некоторыми дополнительными ключевыми словами для полученных значений:

print templ.substitute(record, attr1_len=len(record.attr1), ...)

К сожалению, это не удается, жалуясь на то, что экземпляр записи не имеет атрибута __getitem__.

Итак, мой вопрос дважды:

  • мне нужно реализовать __getitem__ А если да, то как?
  • Есть ли более элегантный способ для чего -то подобного, где вам просто нужно вывести кучу атрибутов, для которых вы уже знаете название?
Это было полезно?

Решение

class MyRecord:
    #....  
    def __getitem__(self, key):
        return getattr(self, key)

Другие советы

Если вы сделаете длину ATTR1 и атрибутом класса записей (так что вы действительно просто печатаете атрибуты экземпляра, как следует из названия), вы можете просто сделать это.

attrs = ['id', 'attr1', 'attr1_len', ...]
print '\t'.join(getattr(record, attr) for attr in attrs)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top