2013-05-16 2 views
1

У меня есть список объектов. Я пытаюсь вывести осмысленное представление объектов в списке, которое показывает некоторые из переменных экземпляра, используя string formatting capability, встроенный в последние версии Python. Я использую Python 3.3.0.Пользовательское форматирование строк для списка объектов

Я определил метод __str__ в классе для объектов в моем списке. Если я пытаюсь напечатать отдельный объект, я получаю представление, возвращаемое методом __str__. Но если я попытаюсь распечатать весь список, я получаю общее представление, как будто я не определил метод __str__. Вот пример:

class CustomClass: 
    def __init__(self): 
     self.instanceVar = 42 

    def __str__(self): 
     return "{} (instanceVar = {})".format(self.__class__.__name__, self.instanceVar) 

testObject = CustomClass() 

print("{}".format(testObject)) 
# CustomClass (instanceVar = 42) 

print("{}".format([testObject])) 
# [<__main__.CustomClass object at 0x1006cbed0>] 

Как я могу получить 2-ое заявление для печати, чтобы напечатать что-то вроде [CustomClass (instanceVar = 42)]? Можно ли это сделать, просто передав правильную строку формата функции print или она более сложная?

+0

вы можете переопределить '__repr__' слишком – GP89

+0

@Joran Бизли и unutbu, вы оба дали полезные ответы. Джоран, я решил принять ваш ответ, так как вы ответили первым. –

+0

Возможный дубликат [Как применить \ _ \ _ str \ _ \ _ функцию при печати списка объектов в python] (http://stackoverflow.com/questions/3558474/how-to-apply-str-function-when -printing-a-list-of-objects-in-python) –

ответ

5

вам нужно будет определить его метод __repr__ Я считаю

class CustomClass: 
    def __str__: 
     return "whatever" 
    def __repr__: 
     return str(self) 
+0

Спасибо. Я не знаю, почему я не думал попробовать это. –

+0

Когда вы реализуете __str__, иногда вы также можете реализовать __unicode__ тоже - для проверки отличий http://stackoverflow.com/questions/1307014/python-str-versus-unicode#1307210 –

3

При печати списка, вы получите repr объектов в списке. Чтобы получить желаемый формат, определите метод __repr__.

Если вы не определяете __str__, но определить __repr__, то __repr__ будет использоваться вместо __str__ всякий раз, когда Python пытается найти str объекта. Таким образом, вам не нужно определять оба варианта, если вы этого не хотите.

class CustomClass: 
    def __init__(self): 
     self.instanceVar = 42 

    def __repr__(self): 
     return "{} (instanceVar = {})".format(self.__class__.__name__, self.instanceVar) 
Смежные вопросы