Как я могу найти атрибут в любой области по имени? - PullRequest
4 голосов
/ 17 мая 2010

Как я могу найти атрибут в любой области по имени? Моим первым испытанием является использование globals () и localals (). например,

>>> def foo(name):
...   a=1
...   print globals().get(name), locals().get(name)
...
>>> foo('a')
None 1
>>> b=1
>>> foo('b')
1 None
>>> foo('foo')
<function foo at 0x014744B0> None

Пока все хорошо. Однако он не может искать любые встроенные имена.

>>> range
<built-in function range>
>>> foo('range')
None None

>>> int
<type 'int'>
>>> foo('int')
None None

Есть идеи, как искать встроенные атрибуты?

Ответы [ 3 ]

4 голосов
/ 17 мая 2010
>>> getattr(__builtins__, 'range')
<built-in function range>
2 голосов
/ 17 мая 2010

Используйте __builtin__ (без s в конце, как предлагают Триптих и Дункан):

>>> import __builtin__
>>> getattr(__builtin__, 'range')
<built-in function range>

__builtins__ является реализацией CPython , что делает ваш код менее переносимым.

0 голосов
/ 17 мая 2010

Используйте __builtins__ "superglobal". Он содержит именно то, что вы ищете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...