Этого должно хватить.
При печати списков, а также других контейнерных классов содержащиеся элементы будут напечатаны с использованием __repr__
, поскольку __repr__
предназначено для использования для внутреннего представления объектов.
Если мы позвоним: help(object.__repr__)
, он скажет нам:
Help on wrapper_descriptor:
__repr__(self, /)
Return repr(self).
И если мы позвоним help(repr)
, то получится:
Help on built-in function repr in module builtins:
repr(obj, /)
Return the canonical string representation of the object.
For many object types, including most builtins, eval(repr(obj)) == obj.
Если для объекта реализовано __str__
, а __repr__
не равно repr(obj)
, то будет выводиться вывод по умолчанию, как и print(obj)
, если не реализовано ни одно из них.
Таким образом, единственный способ - реализовать __repr__
для вашего класса. Один из возможных способов сделать это заключается в следующем:
class C:
def __str__(self):
return str(f"{self.__class__.__name__} class str ")
C.__repr__=C.__str__
ci = C()
print(ci) #C class str
print(str(ci)) #C class str
print(repr(ci)) #C class str