- Nazwa pliku z którego kod jest uruchomiony
- Nazwa klasy, z której kod jest uruchomiony
- nazwa metody (atrybut klasy), gdzie kod jest uruchomiony
Odpowiedz
Oto przykład każda:
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
dla reszty sYS i śladowe moduły
http://docs.python.org/library/sys.html http://docs.python.org/library/trace.html
Niektórzy więcej informacji: https://mail.python.org/pipermail/python-list/2001-August/096499.html i http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html
chciałeś go do raportowania błędów, ponieważ moduł traceback może obsłużyć że:
import sys
class A:
def __init__(self):
print __file__
print self.__class__.__name__
print sys._getframe().f_code.co_name
a = A()
Bądź ostrożny pod numerem bardzo. Zastanów się:
class A:
pass
B = A
b = B()
Co to jest "nazwa klasy" b
tutaj? Czy to A, czy B? Czemu?
Chodzi o to, że nie powinieneś o tym wiedzieć. Obiekt jest tym, czym jest: jego nazwa jest bardzo rzadko przydatna.
Nazwa klasy to "A", ponieważ 'b' jest ** instancją ** z' B', która z kolei jest ** referencją ** do 'A', która jest ** klasą **. – ted
Z pewnością dla użytkowników końcowych; ale niezwykle przydatne przy debugowaniu - jak w przypadku obsługi wyjątku lub podobnej do zgłaszania, gdzie jest. Możesz napisać miły komunikat o błędzie, aby powiedzieć to samo, ale i tak często zawierałby tę informację, w takim przypadku wydaje się, że za każdym razem wpisywanie jest niepotrzebne. Ponadto, aby zbudować (na przykład) ogólny pakiet rejestracyjny, niezwykle przydatna jest możliwość zapewnienia tego automatycznie. Gdyby twoja argumentacja się utrzymywała, czy nie odnosiłaby się równie dobrze do isinstance(), która z pewnością jest ważna i przydatna? – TextGeek
Czy próbujesz uruchomić go z wiersza poleceń? To oczywiście nie jest zdefiniowane; spróbuj utworzyć plik z kodem i wykonując nazwę Pythona - będzie działał zgodnie z oczekiwaniami. –
uruchomić go z pliku – mtasic85
Dlaczego nie sprawdzić.currentframe? – tzot