Python-以编程方式更新当前函数名属性
我目前正在使用nose执行一些测试,当使用带有nose+xunit输出的生成器时,您需要设置当前函数的Python-以编程方式更新当前函数名属性,python,python-2.7,function,Python,Python 2.7,Function,我目前正在使用nose执行一些测试,当使用带有nose+xunit输出的生成器时,您需要设置当前函数的\uuuuuu name\uuuu属性,以正确控制xunit输出中的测试名称(参见示例) 因为我不想每次都像这样硬编码函数名: def my_function(): for foo in bar: fn = lambda: some_generated_test(foo) fn.description = foo.get('name') my_function.__n
\uuuuuu name\uuuu
属性,以正确控制xunit输出中的测试名称(参见示例)
因为我不想每次都像这样硬编码函数名:
def my_function():
for foo in bar:
fn = lambda: some_generated_test(foo)
fn.description = foo.get('name')
my_function.__name__ = foo.get('name')
yield fn
如何以编程方式引用函数并设置\uuu name\uuu
我试过使用sys.\u getframe(),它会产生关于当前函数(名称等)的各种属性,我试着使用
setattr(*something*,“\u name\u”,some\u test\u name)
,但这不起作用,因为我似乎无法确定sys.\u getframe()的哪一部分引用了该函数。最终通过SO找到了解决方案:
比我想象的要复杂得多,但我现在可以:
def my_function():
for foo in bar:
fn = lambda: some_generated_test(foo)
fn.description = foo.get('name')
setattr(get_func(), "__name__", foo.get('name'))
yield fn
然后,
xunit
输出包含生成器的数据name
条目。为什么不在函数外部定义一些测试名称():?或者编写完成该操作的decorator。另外,我认为inspect模块可以帮助您获取函数名。@user2357112函数包含生成器,但是nose+xunit使用函数名作为测试名,这在您希望使用生成的测试名时是不准确的。设置函数有什么问题吗?您希望如何引用该函数?现在还不清楚你想在这里做什么。