2017-02-05 3 views
0

У меня возникла проблема с печатью метода с переменной.Python - Метод печати с использованием переменных

Если у меня print (pet.__str__()), он работает должным образом. Однако я пытаюсь выполнить цикл с использованием переменных, чтобы заменить «pet» на переменную. Затем я назначаю его переменной и пытаюсь ее распечатать. Когда я печатаю его, он буквально печатает строку pet.__str__() вместо вызова метода. Я не уверен, что я делаю неправильно. Вот общий обзор моего кода. Благодаря

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

*** ЗДЕСЬ РЕЗУЛьТАТ ПОЛУЧИТЬ *******

animal_variable.__str__() 

pet.__str__(), 

class 'str' 

*** Если бы я это сделать это работает, как ожидалось, однако это не позволяет мне Перебери различные переменные в моем списке

print (pet.__str__()) 
+0

'pet' уже является переменной - какая другая переменная вы используете? – furas

+1

BTW: вместо 'pet .__ str __()' вы должны использовать 'str (pet)' - это предпочтительный метод. – furas

+0

Вы пытаетесь 'eval' строку, чтобы получить переменные? –

ответ

1

Попробуйте этот метод:

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

Если у вас уже есть список животных, а затем просто заменить цикл выше:

for pet in my_list: 

Другой способ использовать это, чтобы переопределить __str__ метод класса, чтобы вернуться выше. Что-то вроде:

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

Хотя эта общая идея кажется лучше, чем ОП, я думаю, вы что-то неправильно поняли. Мне кажется, что «pet» - это строка, предназначенная для обозначения переменной «pet» (возможно, с eval?). Следовательно, похоже, что все строки в 'my_list' являются именами переменных. Поэтому я думаю, что цикл должен начинаться с 'для животных в [pet, dog, ...]' – zondo

+0

@zondo Хм ... возможно. Я добавлю, что в качестве другого варианта – smac89

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