我有一个lambda函数,它被传递给一个对象并存储为一个变量:
f = lambda x: x.method_foo()
我想确定变量x
上调用的方法名称为字符串。所以我想要
method_foo
保存为字符串。
任何帮助表示感谢。
答案 0 :(得分:3)
您可以使用func_code
访问lambda的代码对象,并使用co_names
访问代码的本地名称。
>>> f = lambda x: x.method_foo
>>> f.func_code.co_names
('method_foo',)
>>> f.func_code.co_names[0]
'method_foo'
答案 1 :(得分:0)
这有点疯狂",但您可以使用Mock
传递给f
并获取调用函数后添加到模拟中的方法:
>>> from mock import Mock
>>> f = lambda x: x.method_foo
>>> m = Mock()
>>> old_methods = dir(m)
>>> f(m)
<Mock name='mock.method_foo' id='4517582608'>
>>> new_methods = dir(m)
>>> next(method for method in new_methods if method not in old_methods)
'method_foo'