Zoeken…


Invoering

De speciale variabele __name__ wordt gebruikt om te controleren of een bestand is geïmporteerd als een module of niet, en om een functie, klasse, __name__ te identificeren aan de __name__ kenmerk __name__ .

Opmerkingen

De speciale variabele __name__ Python is ingesteld op de naam van de bevattende module. Op het hoogste niveau (zoals in de interactieve tolk of in het hoofdbestand) is deze ingesteld op '__main__' . Dit kan worden gebruikt om een blok instructies uit te voeren als een module rechtstreeks wordt uitgevoerd in plaats van geïmporteerd.

Het gerelateerde speciale kenmerk obj.__name__ wordt gevonden in klassen, geïmporteerde modules en functies (inclusief methoden) en geeft de naam van het object wanneer gedefinieerd.

__name__ == '__main__'

De speciale variabele __name__ wordt niet ingesteld door de gebruiker. Het wordt meestal gebruikt om te controleren of de module op zichzelf wordt uitgevoerd of omdat een import is uitgevoerd. Om te voorkomen dat uw module bepaalde delen van de code uitvoert wanneer deze wordt geïmporteerd, controleert u if __name__ == '__main__' .

Laat module_1.py slechts één regel lang zijn:

import module2.py

En laten we kijken wat er gebeurt, afhankelijk van module2.py

Situatie 1

module2.py

print('hello')

Het uitvoeren van module1.py zal hello afdrukken
Het uitvoeren van module2.py zal hello afdrukken

Situatie 2

module2.py

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

Het uitvoeren van module1.py zal niets afdrukken
Het uitvoeren van module2.py zal hello afdrukken

function_class_or_module .__ name__

Het speciale kenmerk __name__ van een functie, klasse of module is een tekenreeks die de naam bevat.

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

Het kenmerk __name__ is echter niet de naam van de variabele die verwijst naar de klasse, methode of functie, het is eerder de naam die eraan is gegeven wanneer deze is gedefinieerd.

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

Dit kan onder andere worden gebruikt voor het opsporen van fouten:

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

Gebruik in logboekregistratie

Het configureren van de ingebouwde logging functionaliteit, een gemeenschappelijk patroon is een logger het creëren __name__ van de huidige module:

logger = logging.getLogger(__name__)

Dit betekent dat de volledig gekwalificeerde naam van de module in de logboeken wordt weergegeven, zodat u gemakkelijker kunt zien waar berichten vandaan komen.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow