2013-12-20 3 views
2

Это то, что мне нужно:Как получить, кто вызвал функцию или метод?

def get_invoker(): 
    # your magic here 

# invoker.py  

def f(): 
    invoker = get_invoker() 
    print(invoker) 


# module1.py 
class C(object): 
    def invoke_f(self): 
     f() 


f() 
# print <module1> 

c = C() 
c.invoke_f() 
# print C.invoke_f 

Возможно ли это? Я знаю, что у modlue inspect есть все это волшебство, но я не смог его найти.

EDIT:

Я хотел бы получить объект функции (или модуль). Не только имя.

+0

В последнем примере выход не должен быть 'invoke_f'? –

+0

Да! Спасибо @xndrme. – santiagobasulto

ответ

1

так:

>>> import inspect 
>>> def called_function(): 
...  print inspect.stack()[1][3] 
... 
>>> def caller(): 
...  called_function() 
... 
>>> caller() 
caller 
+0

Вы получаете строку отсюда. Как вы можете получить объект функции? – santiagobasulto

Смежные вопросы