Recherche…


Introduction

La variable spéciale __name__ est utilisée pour vérifier si un fichier a été importé en tant que module ou non, et pour identifier une fonction, une classe, un objet module par leur attribut __name__ .

Remarques

La variable spéciale Python __name__ est définie sur le nom du module contenant. Au niveau supérieur (comme dans l'interpréteur interactif ou dans le fichier principal), il est défini sur '__main__' . Cela peut être utilisé pour exécuter un bloc d'instructions si un module est exécuté directement plutôt que d'être importé.

L'attribut spécial associé obj.__name__ se trouve sur les classes, les modules et fonctions importés (y compris les méthodes) et donne le nom de l'objet lorsqu'il est défini.

__name__ == '__main__'

La variable spéciale __name__ n'est pas définie par l'utilisateur. Il est principalement utilisé pour vérifier si le module est exécuté ou non, car une import été effectuée. Pour éviter que votre module if __name__ == '__main__' certaines parties de son code lorsqu'il est importé, vérifiez if __name__ == '__main__' .

Soit module_1.py une seule ligne de long:

import module2.py

Et voyons ce qui se passe, en fonction de module2.py

Situation 1

module2.py

print('hello')

Exécuter module1.py imprimera hello
Exécuter module2.py va imprimer hello

Situation 2

module2.py

if __name__ == '__main__':
    print('hello')

Exécuter module1.py n'imprimera rien
Exécuter module2.py va imprimer hello

function_class_or_module .__ nom__

L'attribut spécial __name__ d'une fonction, classe ou module est une chaîne contenant son nom.

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

L'attribut __name__ n'est toutefois pas le nom de la variable qui fait référence à la classe, à la méthode ou à la fonction, mais plutôt le nom qui lui est donné lors de la définition.

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

Cela peut être utilisé, entre autres, pour le débogage:

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

Utiliser dans la journalisation

Lors de la configuration de la fonctionnalité de logging intégrée, un modèle courant consiste à créer un enregistreur avec le __name__ du module actuel:

logger = logging.getLogger(__name__)

Cela signifie que le nom qualifié complet du module apparaîtra dans les journaux, ce qui facilitera la recherche de l'origine des messages.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow