Определите разные выходные данные для метода _repr_ при печати списка объектов

#python #python-3.x #repr #python-class

#python #python-3.x #repr #python-class

Вопрос:

У меня есть пользовательский класс, который реализовал _repr_ метод, распечатывая все свойства этого объекта, например:

 Id: XXX,
Name: XXX 
PropA: XXX,
PropB: XXX,
PropC: XXX ...
  

Проблема —

Есть ли способ изменить вывод, чтобы возвращать только подмножество свойств, например, при печати списка этих объектов:

 Id: XXX,
Name: XXX 
  

Моя идеология — единственным возможным способом, который я могу придумать для реализации этого, было бы реализовать пользовательский класс list для объекта, который реализует менее подробный вывод _repr_ , однако я бы предпочел избежать этого, если это возможно.

Комментарии:

1. print([obj1, obj2, obj3]) будет использоваться __repr__ , тогда print(*[obj1, obj2, obj3]) как , который сначала распаковывает список, будет использовать __str__ , поэтому одним из решений было бы переопределить __str__ , чтобы вернуть короткую версию и использовать print(*lst_of_objects) , если вы хотите зарезервировать __repr__ для длинной версии.

2. Ваш класс не должен вести себя по-разному в зависимости от обстоятельств. Если вы хотите более минимальный repr, явно создайте метод, который возвращает единицу, и явно используйте like print([o.min_repr() for o in lst]) .