2016-01-18 4 views
0

Классы Python содержат пространства имен, а функция dir перечисляет содержимое пространства имен.Список всех элементов в пространстве имен python

Пространство имен object содержит несколько функций, например функцию __subclasses__, которая при вызове возвращает список, содержащий все известные классы, которые являются подклассами object.

Выход dir(object) является:

['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', 
'__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__setattr__', '__sizeof__', '__str__', '__subclasshook__'] 

__subclasses__ функция отсутствует в списке, но это там, попробуйте: object.__subclasses__().

Я понимаю, что класс может изменить __dir__ словарь, чтобы настроить то, что dir шоу, но это не случай object, на самом деле object.__dir__ вызывает исключение.

Тем не менее, когда я использую автозаполнение IPython, функция __subclasses__ есть. Как я могу получить тот же список элементов, который использует IPython, чтобы я знал, что также есть __subclasses__?

+1

«Классы Python - это просто пространства имен» - нет, они не являются. – user2357112

+0

@ user2357112: Не могли бы вы немного разобраться? Из документации python [здесь] (https://docs.python.org/2/tutorial/classes.html) я прочитал: * Когда определение класса остается нормально (через конец), создается объект класса. Это в основном оболочка содержимого пространства имен, созданного определением класса; * –

+0

Хотя объект класса завершает пространство имен оператора класса, говоря, что класс просто пространство имен похоже на то, что человек - это просто левая нога , Пространство имен является частью класса. – user2357112

ответ

2

IPython находит __subclasses__ через совершенно обычные средства, глядя на type(object). С другой стороны, поскольку object является типом, dir for types конкретно не смотрит на type(object). Тот, кто написал dir, решил, что увидеть атрибуты метакласса в списке будет путать.

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