- Nome del file da cui il codice viene eseguito
- Nome della classe da cui il codice viene eseguito
- nome del metodo (attributo della classe) in cui il codice viene eseguito
risposta
Ecco un esempio di ciascuno:
from inspect import stack
class Foo:
def __init__(self):
print __file__
print self.__class__.__name__
print stack()[0][3]
f = Foo()
self.__class__.__name__ # name of class i'm in
per il resto sYS e traccia moduli
http://docs.python.org/library/sys.html http://docs.python.org/library/trace.html
qualche informazione in più: https://mail.python.org/pipermail/python-list/2001-August/096499.html e http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html
volevi per la segnalazione degli errori perché il modulo traceback in grado di gestire che:
import sys
class A:
def __init__(self):
print __file__
print self.__class__.__name__
print sys._getframe().f_code.co_name
a = A()
Be molto attento. Considerate:
class A:
pass
B = A
b = B()
Qual è il 'nome di classe' di b
qui? È A o B? Perché?
Il punto è che non dovresti aver bisogno di sapere o preoccuparti. Un oggetto è quello che è: il suo nome è molto raramente utile.
Il nome della classe è 'A' poiché' b' è un'Istanza ** di 'B' che a sua volta è un ** riferimento ** a' A' che è una ** Classe **. – ted
Per gli utenti, sicuramente; ma estremamente utile durante il debug - come per un gestore di eccezioni o simili per segnalare dove si trova. Potresti comporre un bel messaggio di errore per dire la stessa cosa, ma spesso contiene comunque queste informazioni, nel qual caso sembra uno spreco scrivere ogni volta. Inoltre, per creare (ad esempio) un pacchetto di registrazione generale, è estremamente utile essere in grado di fornire questo automaticamente. Se la tua argomentazione è valida, non si applicherebbe altrettanto bene a isinstance(), che sicuramente è importante e utile? – TextGeek
Stai cercando di eseguirlo dalla riga di comando? Ovviamente non è definito allora; prova a creare un file con il codice e facendo il nome del file python - funzionerà come previsto. –
eseguilo dal file – mtasic85
Perché non ispezionare.currentframe? – tzot