#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])
.