2016-04-22 16 views
0

Ist es möglich, die Zeichenfolgendarstellung (mit __str__) aller Objekte in einer Liste von Objekten aus einer eigenen __str__ Funktion anderer Klassen zurückzugeben?Einzelne Zeichenfolgendarstellung aller Objekte in der Liste der Objekte zurückgeben

Angenommen, ich habe eine Klasse, die alle Methoden enthält, die an Bar-Objekten ausgeführt werden. Nenne diese Klasse Foo. Dann:

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)) 

Ich mag die Stringdarstellung aller Objekte in self.bars drucken WHEN ich Haupt() aufgerufen, um eine Instanz des Bar-Objekts, da die Schaffung würde mir nicht geben Zugriff auf die Zeichenfolge Darstellung aller Objekte in self.bars. in Bezug auf die Notwendigkeit von __repr__

Um zu klären, ich bin nicht die gleiche Frage wie in this Post zu fragen. Stattdessen möchte ich die String-Repräsentation jedes Objekts wie bei einer for-Schleife einzeln zurückgeben.

Gibt es überhaupt, um dies vernünftig oder unangemessen zu tun?

+0

Meinst du sowas wie 'return ','. Join (str (b) für b in self.bars)'? – mgilson

+0

Auch, wenn ich die gleiche Frage wie der Link, den ich gepostet habe, stelle, dann fühle mich frei, mich zu korrigieren. Wenn das in gewisser Hinsicht ein Duplikat ist, liegt es nur an meinem Missverständnis des Themas. – kmartmvp

Antwort

0

Sie haben bereits gesagt, wie dies zu tun ist, verwenden Sie eine for-Schleife.

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

Sie können keine 'liste' von' __str__' zurückgeben. Vielleicht '' \ n'.join (map (str, self.bars)) 'oder das Listen-Verständnis Äquivalent ... – mgilson

+0

@mgilson behoben, dass – Natecat

+0

@Natecat Das eigentliche Problem hier scheint zu sein, dass __str__ kann keine Liste zurückgeben, oder ein Tupel. In diesem Fall versuchen mehrere Elemente wie 'return (" Das ist das Foo-Objekt "," .join ([str (x) + "\ n" für x in self.bars])) 'nicht funktioniert, wie es gibt ein Tupel zurück Wenn ich mich nicht irre, werden in Python alle Funktionen, die mehrere Elemente zurückgeben, als Tupel zurückgegeben und müssen entpackt werden? Es sollte einfach sein, die return-Anweisung zu bearbeiten, aber dies funktioniert möglicherweise nicht immer. – kmartmvp

Verwandte Themen