2017-02-05 1 views
0

Ich habe Probleme beim Drucken einer Methode mit einer Variablen.Python - Drucken Methode mit Variablen

Wenn ich print (pet.__str__()) mache, funktioniert es wie erwartet. Ich versuche jedoch, die Methode mit Variablen zu durchlaufen, um "pet" durch eine Variable zu ersetzen. Ich weise es dann einer Variablen zu und versuche es zu drucken. Wenn ich es drucke, druckt es buchstäblich die Zeichenkette pet.__str__(), anstatt die Methode aufzurufen. Ich bin mir nicht sicher, was ich falsch mache. Hier ist ein allgemeiner Überblick über meinen Code. Dank

pet = Pet('Taz') 

my_list = ["pet", "dog", "big_dog", "small_dog"] 



my_string = ["animal_variable.__str__()", "animal_variable.kind", "animal_variable.color", "animal_variable.do_tricks()"] 
sentence1 = [] 

sentence1 = my_string[0] 
print (sentence1) #DEBUGGING***************************************** 
print (sentence1.replace('animal_variable', my_list[0])) 
print (type(sentence1)) 

*** HIER DER AUSGANG I ******* GET

animal_variable.__str__() 

pet.__str__(), 

class 'str' 

*** Wenn ich dies tue es wie erwartet funktioniert, aber dies mich nicht erlauben, Schleife durch verschiedene Variablen in meiner Liste

print (pet.__str__()) 
+0

'Haustier' ist bereits variabel - welche andere Variable können Sie verwenden? – furas

+1

BTW: anstelle von 'Pet .__ str __()' sollten Sie 'str (pet)' verwenden - es ist bevorzugte Methode. – furas

+0

Versuchen Sie eine Zeichenfolge zu "evalieren", um Ihre Variablen zu erhalten? –

Antwort

1

Versuchen Sie diese Methode:

my_list = ["pet", "dog", "big_dog", "small_dog"] 

for pet in map(Pet, my_list): 
    print ("{}, Kind: {}, Color: {}\nTricks: {}".format(str(pet), pet.kind, pet.color, pet.do_tricks())) 

Wenn Sie bereits eine Liste von Tieren haben, dann ersetzen Sie einfach die for-Schleife oben mit:

for pet in my_list: 

Eine andere Methode ist die Verwendung __str__ Methode der Klasse außer Kraft zu setzen, die oben zurückzukehren. Etwas wie:

def __str__(self): 
    return "Kind: {}, Color: {}\nTricks: {}".format(self.kind, self.color, self.do_tricks()) 
+0

Während diese allgemeine Idee scheint besser zu sein als die OPs, ich denke, Sie haben etwas falsch verstanden. Es sieht für mich wie "Pet" aus, da sich ein String auf die Variable "pet" bezieht (vielleicht mit eval?). Es sieht so aus, als wären alle Strings in 'my_list' Variablennamen. Daher denke ich, dass die Schleife mit "für Tier in [Haustier, Hund, ...] beginnen sollte" – zondo

+0

@zondo Hmm ... möglicherweise. Ich werde das als eine weitere Option hinzufügen – smac89