Python Language                
            Специальная переменная __name__
        
        
            
    Поиск…
Вступление
 Специальная переменная __name__ используется для проверки того, был ли файл импортирован как модуль или нет, а также для идентификации объекта функции, класса, модуля их атрибутом __name__ . 
замечания
 Специальная переменная __name__ Python устанавливается на имя содержащего модуля. На верхнем уровне (например, в интерактивном интерпретаторе или в основном файле) устанавливается значение '__main__' . Это можно использовать для запуска блока операторов, если модуль запускается напрямую, а не импортируется. 
 Связанный специальный атрибут obj.__name__ находится в классах, импортированных модулях и функциях (включая методы) и дает имя объекта при его определении. 
__name__ == '__main__'
 Пользовательская переменная __name__ не задается пользователем. Он в основном используется для проверки того, выполняется ли модуль самостоятельно или выполняется, потому что был выполнен import . Чтобы ваш модуль не запускал определенные части своего кода при импорте, проверьте if __name__ == '__main__' . 
Пусть module_1.py - всего одна строка:
import module2.py
И посмотрим, что произойдет, в зависимости от модуля2.py
Ситуация 1
module2.py
print('hello')
 Запуск module1.py будет печатать hello 
 Запуск модуля2.py будет печатать hello 
Ситуация 2
module2.py
if __name__ == '__main__':
    print('hello')
 Запуск module1.py ничего не напечатает 
 Запуск модуля2.py будет печатать hello 
function_class_or_module .__ name__
 Специальный атрибут __name__ функции, класса или модуля - это строка, содержащая ее имя. 
import os
class C:
    pass
def f(x):
    x += 2
    return x
print(f)
# <function f at 0x029976B0>
print(f.__name__)
# f
print(C)
# <class '__main__.C'>
print(C.__name__)
# C
print(os)
# <module 'os' from '/spam/eggs/'>
print(os.__name__)
# os
 Атрибут __name__ не является, однако, именем переменной, которая ссылается на класс, метод или функцию, скорее это имя, данное ему, когда определено. 
def f():
    pass
print(f.__name__)
# f - as expected
g = f
print(g.__name__)
# f - even though the variable is named g, the function is still named f
Это можно использовать, среди прочего, для отладки:
def enter_exit_info(func):
    def wrapper(*arg, **kw):
        print '-- entering', func.__name__
        res = func(*arg, **kw)
        print '-- exiting', func.__name__
        return res
    return wrapper
@enter_exit_info
def f(x):
    print 'In:', x
    res = x + 2
    print 'Out:', res
    return res
a = f(2)
# Outputs:
#     -- entering f
#     In: 2
#     Out: 4
#     -- exiting f
Использование при регистрации
 При настройке встроенных функций logging общий шаблон заключается в создании регистратора с __name__ текущего модуля: 
logger = logging.getLogger(__name__)
Это означает, что полное имя модуля появится в журналах, что упростит просмотр сообщений.