Ricerca…


introduzione

La variabile speciale __name__ viene utilizzata per verificare se un file è stato importato come modulo o meno e per identificare una funzione, classe, oggetto modulo con il loro attributo __name__ .

Osservazioni

La variabile speciale Python __name__ è impostata sul nome del modulo contenitore. Al livello più alto (come nell'interprete interattivo o nel file principale) è impostato su '__main__' . Questo può essere usato per eseguire un blocco di istruzioni se un modulo viene eseguito direttamente anziché importato.

L'attributo speciale correlato obj.__name__ si trova su classi, moduli e funzioni importati (compresi i metodi) e fornisce il nome dell'oggetto quando definito.

__name__ == '__main__'

La variabile speciale __name__ non è impostata dall'utente. Viene in gran parte utilizzato per verificare se il modulo viene eseguito da solo o eseguito perché è stata eseguita import . Per evitare che il tuo modulo esegua determinate parti del suo codice quando viene importato, controlla if __name__ == '__main__' .

Lascia che module_1.py sia lungo una sola riga:

import module2.py

E vediamo cosa succede, a seconda del modulo2.py

Situazione 1

module2.py

print('hello')

L'esecuzione di module1.py stamperà hello
Eseguendo module2.py verrà stampato hello

Situazione 2

module2.py

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

L'esecuzione di module1.py non stampa nulla
Eseguendo module2.py verrà stampato hello

function_class_or_module .__ name__

L'attributo speciale __name__ di una funzione, classe o modulo è una stringa che contiene il suo nome.

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'attributo __name__ non è, tuttavia, il nome della variabile che fa riferimento alla classe, al metodo o alla funzione, piuttosto è il nome che gli viene dato quando definito.

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

Questo può essere usato, tra gli altri, per il debug:

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

Utilizzare nella registrazione

Quando si configura la funzionalità di logging incorporata, uno schema comune è creare un logger con __name__ del modulo corrente:

logger = logging.getLogger(__name__)

Ciò significa che il nome completo del modulo apparirà nei log, rendendo più facile vedere da dove vengono i messaggi.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow