2013-03-04 3 views
3

Мне нужна помощь по этому вопросу. Как преобразовать строку в имя переменной/object/instance, так как я не знаю, как ее классифицировать. Предполагая, что мой код: -Преобразовать строку в имя объекта

a = {} 
b = {} 

class Test: 
    def getKeys(self, var): 
     return var.keys() #where var refers to the dictionary and its a string initially 
+1

Во-первых, вы должны избегать сбивающего с толку термина «переменная» в Python, поскольку объекты не являются переменными в здравом смысле памяти-box – eyquem

+0

@eyquem спасибо за объяснение – Natsume

+0

Во-вторых, все объекты в Python, и любой объект является экземпляр класса или типа. Слово «экземпляр» используется, когда отношение между объектом и его классом более или менее является причиной. – eyquem

ответ

3

Это было навсегда, так как я сделал что-нибудь с Python, но я помню, что эту проблему раз. Я предлагаю вам заглянуть в функцию eval(). Вот ссылка.

http://docs.python.org/2/library/functions.html#eval

+0

ничего другого, кроме eval, кажется опасным, поскольку, если пользователь знает многое из того, что я делаю, пользователь может делать что-то, используя eval. – Natsume

+0

В отличие от простого указания на ссылку, было бы более полезно, если бы вы могли привести быстрый пример. –

+1

Эта ссылка была полезна. Вот мой фрагмент кода в качестве примера: 'code' def goto (self, link): element = 'self.' + Link locator = eval (element) self.wd.find_element_by_link_text (локатор) .click() 'code' – user1411110

3

Если я правильно понимаю, ваша переменная var является строка, которая может быть "a" или "b". Вы хотите использовать это письмо, чтобы выбрать правильный словарь глобальную переменную, чтобы посмотреть в

Я предлагаю положить ваши словари в другой словарь, с помощью клавиш вы можете использовать, чтобы посмотреть его по имени:.

my_dicts = {"a":a, "b":b} 

class Test: 
    def getkeys(self, dict_name): 
     return my_dicts[dict_name].keys() 

Однако , это может быть просто проблема дизайна. Вместо отправки имени переменной в метод getkeys, почему бы просто не отправить сам словарь и использовать текущий код?

Вместо Test().getkeys("a"), звонок Test().getkeys(a) (без кавычек).

+1

точно, что я хотел и да, вы правильно понимаете, спасибо! +1 для вас :) – Natsume

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