2017-03-19 7 views
0

Nachstehend ist mein aktueller Code, ich bin ziemlich neu in Python. Ich versuche eine Liste von Photo-Instanzen zu erstellen, wobei jede Photo-Instanz die Daten von jedem Tupel in der tups_list verwendet. und speichern Sie diese Liste in einer Variablen photo_insts. Momentan erhalte ich keinen Fehler, buchstäblich passiert nichts im Terminal, wenn ich versuche, die Datei auszuführen.Liste der variablen Instanzen

photo_insts = [] 
tups_list = [("Portrait 2","Gordon Parks",["chicago", "society"]),("Children in School","Dorothea Lange",["children","school","1930s"]),("Airplanes","Margaret Bourke-White",["war","sky","landscape"])] 
class Photo2(object): 
    def __init__(self, title_str, photo_by,tags_list): 
     self.title = title_str 
     self.artist = photo_by 
     self.tags = tags_list 
     for i in tups_list: 
      photo_tuple = (i[0],i[1],i[2]) 
      photo_insts.append(photo_tuple) 
      print i 

Im Folgenden sind Tests für unterschiedliche Werte zu überprüfen, um zu laufen:

class Phototest(unittest.TestCase): 
    def test_photo_insts1(self): 
     self.assertEqual(type(photo_insts),type([])) 
    def test_photo_insts2(self): 
     self.assertEqual(type(photo_insts[0]),type(Photo("Photo2","Photo Student",["multiple","tags"]))) 
    def test_photo_insts3(self): 
     self.assertEqual([x.title for x in photo_insts],["Portrait 2", "Children in School", "Airplanes"]) 
    def test_photo_insts4(self): 
     self.assertEqual([x.artist for x in photo_insts],["Gordon Parks","Dorothea Lange","Margaret Bourke-White"]) 
    def test_photo_insts5(self): 
     self.assertEqual([x.tags for x in photo_insts],[["chicago","society"],["children", "school","1930s"],["war","sky","landscape"]]) 
+0

Wenn das, was Sie auf dem Laufenden der gesamte Code ist - dann werden nur die ersten beiden Zeilen haben keine Wirkung; Die Definition von '' Class Photo2'' ist sinnlos, da Sie niemals Instanzen dieser Klasse erstellen. Diese letzten 4 Zeilen sollten wahrscheinlich außerhalb der Klasse liegen und sollten ein '' Photo2() '' anstelle eines Tupels erzeugen. – jasonharper

+0

@ jasonharper Ich bin immer noch ein wenig verwirrt, ich dachte, dass ich Instanzen für die Klasse Photo2 mit meinem def __init __ erstellt habe (self, title_str, photo_by, tags_list): und die aufgelisteten Attribute. – sammie1991

Antwort

0

Ich denke, das ein Tippfehler ist:

photo_tuple = (i[0],i[1],i[2])

=>

photo_tuple = Photo2 (i[0],i[1],i[2])

Die Funktion __init__ wird beim Erstellen einer Instanz Photo2 aufgerufen. Wenn Sie innerhalb der Funktion __init__ aufrufen, erhalten Sie eine Rekursion!

=> Der Code sollte wie folgt aussehen:

class Photo2(object): 
    def __init__(self, title_str, photo_by, tags_list): 
     self.title = title_str 
     self.artist = photo_by 
     self.tags = tags_list 
# end class 
tups_list = [ 
    ("Portrait 2","Gordon Parks",["chicago", "society"]) 
    ,("Children in School","Dorothea Lange",["children","school","1930s"]) 
    ,("Airplanes","Margaret Bourke-White",["war","sky","landscape"]) 
    ] 
photo_insts = [] 
for i in tups_list : 
    photo_tuple = Photo2 (i[0],i[1],i[2]) 
    photo_insts.append(photo_tuple) 
    print i[0] 
for p in photo_insts : 
    print repr (p) 

Ausgabe in der Konsole:

Portrait 2 
Children in School 
Airplanes 
<__main__.Photo2 object at 0xb7082cac> 
<__main__.Photo2 object at 0xb7082ccc> 
<__main__.Photo2 object at 0xb7082cec> 
+0

@ Zohl Martin Vielen Dank! Es scheint, als ob es jetzt größtenteils funktioniert ..... aber ich bekomme eine Rückverfolgung, wenn ich es zum Phototest klasse (unittest.TestCase): ......... irgendwelche Ideen ??? self.assertEqual (type (photo_insts [0]), type (Photo ("Photo2", "Photo Student", ["multiple", "tags"]))) AssertionError: ! = sammie1991

+0

Der Name der Klasse ist Photo2 und nicht Photo. Der Unittest löst Traceback, weil er eine Variable "Photo" nicht kennt. Ich denke, es wäre besser, die Funktion "isinstance" zu verwenden, um den Typ der Klasse zu überprüfen - in Ihrem Fall: isinstance (photo_insts [0], Photo2) –

+0

toll, das hat funktioniert – sammie1991

Verwandte Themen