2013-06-26 7 views
2

Я использую OptionParser для получения некоторых параметров командной строки для скрипта. У меня есть следующий в моем сценарии:Доступ к элементу объекта python, который является зарезервированным ключевым словом

parser.add_option("--pass", help="password used for authentication") 
(options, args) = parser.parse_args() 

OptionParser принимает все варианты и помещает их в качестве имени членов на объекте. Таким образом, чтобы получить доступ к опции в 'pass', мне пришлось бы ссылаться на options.pass. Это порождает исключение, поскольку pass является зарезервированным ключевым словом (я предполагаю ... я python n00b).

Как получить доступ к этому члену, чтобы получить данные? Я знаю, что могу изменить имя опции, но мне любопытно, как это сделать, не меняя имя.

ответ

4

Вы можете использовать функцию getattr(), чтобы получить ее по названию: getattr(options, 'pass'). При доступе к атрибутам таким образом у вас меньше ограничений на то, как их можно назвать, например, в этом случае вы можете использовать ключевое слово.

+0

Wow. Звучит как ошибка. – Elazar

+0

@ Элазар: Что? Что вы можете использовать ключевое слово для имени атрибута? Помните, по сути, атрибуты - это просто словарь, так что не удивительно, что они могут иметь довольно произвольные имена - просто синтаксически они не могут быть выражены в точечной нотации. – FatalError

+0

Тот факт, что объект может иметь атрибут, который не может быть доступен с использованием точечной нотации (даже из его собственных методов), звучит как ошибка. Там просто нет намеренной «функции». Что случилось с 'x.pass'? Если вы не разрешаете это, вы должны добавить явную проверку в словарь. О, это слишком дорого? поэтому разрешите это. При необходимости измените грамматику. – Elazar

2

Используйте функцию getattr() для его получения: getattr(options, 'pass')

Однако, было бы лучше не использовать зарезервированные ключевые слова в качестве членов. Вы можете оставить опцию --pass, но сохранить его как password с этим:

parser.add_option("--pass", help="password used for authentication", dest='password') 

Затем options.password не является проблемой.