Имя
Не все объекты имеют имя, но у тех, у которых оно есть, имя хранится в их атрибуте __name__. Заметьте, что имя выводится из объекта, а не из переменной, которая указывает на этот объект. Следующий пример подчеркивает это различие:
Листинг 27. Что скрыто в имени
$ python Python 2.2.2 (#1, Oct 28 2002, 17:22:19) [GCC 3.2 (Mandrake Linux 9.0 3.2-1mdk)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> dir() # Функция dir() ['__builtins__', '__doc__', '__name__'] >>> directory = dir # Создать новую переменную >>> directory() # Работает просто как первоначальный объект ['__builtins__', '__doc__', '__name__', 'directory'] >>> dir.__name__ # Как тебя зовут? 'dir' >>> directory.__name__ # У меня такое же имя 'dir' >>> __name__ # А теперь о чем-нибудь совершенно другом '__main__'
Модули имеют имена, а сам интерпретатор Python считается модулем верхнего уровня, или основным модулем. Когда вы запускаете Python интерактивно, локальной переменной __name__ присваивается значение '__main__'. Подобным образом, когда вы выполняете модуль Python из командной строки, а не импортируете его в другой модуль, его атрибуту __name__ присваивается значение '__main__', а не действительное имя этого модуля. Так модули могут взглянуть на свое значение __name__, чтобы определиться, используются ли они в качестве поддержки для другой программы или как основное приложение, выполняемое из командной строки. Следующая идиома весьма распространена в модулях Python:
Листинг 28. Определяем: выполнение или импорт
if __name__ == '__main__': # Сделать здесь что-нибудь уместное, наподобие вызова # функции main(), определенной где-то в этом модуле. main() else: # Ничего не делать. Этот модуль был импортирован другим # модулем, который хочет воспользоваться этой функцией, # классом или другими полезными битами, которые он определил.