В Python, как я могу получить переменную через строковое представление имени переменной?

Я использую Python 2.7.

Взять, к примеру, следующий код:

class Apple:
    def __init__(self, n):
        self.n = n
    def printVariable(self, s): # print variable named s
        if hasattr(self, s):
            print ...

Что бы я заменил ... с печатью self.'s', Например, если я позвонил printVariable('n')что бы я поставил вместо ... печатать n?

Конечно, self.s не будет работать, потому что в первую очередь нет атрибута self.s, но что более важно, это печать другой переменной, а не переменной self.'s' Я хочу напечатать переменную, имя которой представлено строкой s это передается методу.

Я сожалею о запутанной природе self.s а также self.'s' а также s в этом вопросе.

2 ответа

Решение

Если hasattr(self,s), достаточно для ваших нужд, тогда вы хотите getattr():

if hasattr(self, s):
    print getattr(self, s)

На самом деле, вы можете пропустить hasattr в целом, в зависимости от ваших точных требований. getattr() принимает значение по умолчанию для возврата, если атрибут отсутствует:

print gettattr(self, s, 'No such attribute: '+s)

Если вы хотите найти переменные вне текущего объекта (скажем, в локальной или глобальной области, или в другом объекте), попробуйте один из них:

locals()[s]
globals()[s]
getattr(other_object, s)

Примечание: использование locals(), globals() и в меньшей степени, hasattr(self,s) за пределами нескольких ограниченных случаев, это кодовый запах. Это почти наверняка означает, что ваш дизайн имеет недостатки.

Я думаю, что это то, что вы после, но не совсем уверен...

print getattr(self, s)

Вы также можете использовать его, чтобы указать, что возвращать, если он не существует. Посмотреть документацию по getattr

print getattr(self, s, 'default value')
Другие вопросы по тегам