Sök…


Introduktion

__name__ används för att kontrollera om en fil har importerats som en modul eller inte, och för att identifiera ett funktions-, klass-, __name__ deras __name__ .

Anmärkningar

Pythons specialvariabel __name__ är inställd på namnet på den innehållande modulen. På den översta nivån (som i den interaktiva tolkarna eller i huvudfilen) är den inställd på '__main__' . Detta kan användas för att köra ett block med uttalanden om en modul körs direkt snarare än att importeras.

Det relaterade specialattributet obj.__name__ finns på klasser, importerade moduler och funktioner (inklusive metoder) och ger objektets namn när det definieras.

__name__ == '__main__'

Den speciella variabeln __name__ inte in av användaren. Det används mest för att kontrollera om modulen körs av sig själv eller körs eftersom en import utfördes eller inte. Kontrollera if __name__ == '__main__' att undvika att din modul kör vissa delar av sin kod när den importeras.

Låt module_1.py vara bara en rad lång:

import module2.py

Och låt oss se vad som händer beroende på module2.py

Situation 1

module2.py

print('hello')

Kör module1.py kommer att skriva ut hello
Att köra module2.py kommer att skriva ut hello

Situation 2

module2.py

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

Att köra module1.py skriver ingenting
Att köra module2.py kommer att skriva ut hello

function_class_or_module .__ name__

Det speciella attributet __name__ för en funktion, klass eller modul är en sträng som innehåller dess namn.

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__ är dock inte namnet på den variabel som hänvisar till klassen, metoden eller funktionen, utan det är namnet som ges till det när det definieras.

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

Detta kan bland annat användas för felsökning:

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

Använd i loggning

När du konfigurerar den inbyggda logging är ett vanligt mönster att skapa en logger med __name__ för den aktuella modulen:

logger = logging.getLogger(__name__)

Detta innebär att modulens fullt kvalificerade namn kommer att visas i loggarna, vilket gör det lättare att se var meddelanden kommer från.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow