2014-01-28 4 views
2

Я надеюсь, что это не слишком туп вопроса :-(, но почему не __import__ включены в inspect.getmembers(__builtins__)?__import__ отсутствует Python __builtins__ (когда в Django Shell)

Вот что я получаю, когда я пытаюсь печатать внутренние команды:

>>> sorted([name for (name,obj) in inspect.getmembers(__builtins__)]) 
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues'] 

Update:..

на самом деле я был в Django 1.6 оболочки, когда я побежал, что (Python 2.7)

Запуск его в Python 2.7 сам по себе включает __import__. Что может продолжаться?

ответ

1

Из документов:

27.3. __builtin__ — Built-in objects

CPython деталь реализации: Большинство модулей имеют название __builtins__ (обратите внимание на 's') доступны как часть их глобалов. Значение __builtins__ обычно является либо этим модулем, либо значением этого атрибута [sic] __dict__. Поскольку это деталь реализации, она не может использоваться альтернативными реализациями Python.

В вашем случае, это выглядит как __builtins__ вы смотрите на это словарь не модуль (__builtin__.__dict__, а не __builtin__). Таким образом, inspect.getmembers возвращает атрибуты класса dict, а не ключи. Вместо этого вы могли бы хотеть что-то вроде следующего:

if isinstance(__builtins__, dict): 
    names = sorted(__builtins__) 
else: 
    names = sorted(name for name, obj in inspect.getmembers(__builtins__)) 

Или в качестве альтернативы:

import __builtin__ 
names = sorted(name for name, obj in inspect.getmembers(__builtin__)) 
+0

К сожалению, я не понимаю, что я был в Джанго оболочке, когда я отправил свой оригинальный вопрос. Он работает в обычном python 2.7. – Greg

+0

Это объяснение должно быть верным. –

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