2016-04-22 3 views
0

Можно ли вернуть строковое представление (используя __str__) всех объектов в списке объектов из разных классов собственной __str__ функции?Возвращаемое индивидуальное строковое представление всех объектов в списке объектов

Скажем, у меня есть класс, содержащий все методы, выполняемые на объектах Bar. Назовите этот класс Foo. Тогда:

class Foo: 
    def __init__(self): 
     self.bars = [] # contains Bar objects 

    def __str__(self): 
     return "This is the Foo object" 

class Bar: 
    def __init__(self, arg1): 
     self.arg1 = arg1 

    def __str__(self): 
     return "This is Bar object: " + arg1 

def main(): 
    foo = Foo() 
    print(str(foo)) 

Я хочу напечатать строковое представление всех объектов в self.bars КОГДА я называю основным(), так как создание экземпляра объекта Bar не даст мне доступ к строке представление всех объектов в self.bars.

Чтобы уточнить, я не задаю тот же вопрос, что и в сообщении this, относящемся к необходимости __repr__. Вместо этого я хочу, чтобы каждое строковое представление каждого объекта было индивидуально, как и для цикла for.

Есть ли способ сделать это разумно или необоснованно?

+0

Вы имеете в виду что-то вроде 'return ','. Join (str (b) for b in self.bars)'? – mgilson

+0

Кроме того, если я задаю тот же вопрос, что и ссылка, которую я разместил, тогда не стесняйтесь меня исправлять. Если это дубликат в некотором смысле этого слова, то это просто из-за моего непонимания предмета. – kmartmvp

ответ

0

Вы уже сказали, как это сделать, используйте цикл for.

return "".join([str(x) + "\n" for x in self.bars]) 
+0

Вы не можете вернуть 'list' из' __str__'. Возможно, '' \ n'.join (map (str, self.bars)) 'или эквивалент списка ... – mgilson

+0

@mgilson исправил это – Natecat

+0

@Natecat Реальная проблема здесь в том, что __str__ не может вернуть список, или кортеж. В этом случае можно попробовать несколько элементов, таких как 'return (« Это объект Foo »,« .join ([str (x) + «\ n» для x в self.bars])) 'не работает, поскольку это возвращает кортеж. Если я не ошибаюсь, в Python все функции, возвращающие несколько элементов, возвращаются как кортеж и должны быть распакованы? Должно быть легко отредактировать оператор return для работы, но это может не работать во всех случаях. – kmartmvp

Смежные вопросы