2011-09-15 25 views
6

Eventuali duplicati:
How to get the function name as string in Python?Come ottenere il nome della funzione come stringa in Python?

So che posso farlo:

def func_name(): 
    print func_name.__name__ 

che restituirà il nome della funzione come 'my_func'.

Ma come sono nella funzione, c'è un modo per chiamarlo direttamente in modo generico? Qualcosa di simile:

def func_name(): 
    print self.__name__ 

In quali Python avrebbe capito che io voglio la parte superiore della mia gerarchia di codice?

+1

btw, 'self' non è una parola chiave magica Python, è solo una convenzione per nominare il primo parametro passato a un metodo di istanza (che è l'istanza a cui il metodo è associato). – geoffspear

+1

Non penso ci sia alcuna soluzione facile. Controlla questa domanda http://stackoverflow.com/questions/5063607/is-there-a-self-flag-can-reference-python-function-inside-itself – rplnt

+1

Per cosa intendi utilizzare il nome? –

risposta

5

AFAIK, non c'è. Inoltre, anche il tuo primo metodo non è assolutamente affidabile, dal momento che un oggetto funzione può avere più nomi:

In [8]: def f(): pass 
    ...: 

In [9]: g = f 

In [10]: f.__name__ 
Out[10]: 'f' 

In [11]: g.__name__ 
Out[11]: 'f' 
2

Un metodo possibile sarebbe quella di utilizzare Decorators:

def print_name(func, *args, **kwargs): 
    def f(*args, **kwargs): 
     print func.__name__ 
     return func(*args, **kwargs) 
    return f 

@print_name 
def funky(): 
    print "Hello" 

funky() 

# Prints: 
# 
# funky 
# Hello 

Problemi con questa si è ll solo essere in grado di stampare il nome della funzione prima o dopo aver chiamato la funzione effettiva.

Realisticamente, dal momento che si sta già definendo la funzione, non è possibile inserire semplicemente il nome del codice?

5

È inoltre possibile utilizzare il modulo traceback:

import traceback 

def test(): 
    stack = traceback.extract_stack() 
    print stack[len(stack)-1][2] 


if __name__ == "__main__": 
    test() 
Problemi correlati