Python Language
La variable spéciale __name__
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.