Python - 以编程方式更新当前函数__name__属性

时间:2017-02-02 00:44:28

标签: python python-2.7 function

我目前正在使用nose进行一些测试,当使用带有nose + xunit输出的生成器时,你需要设置当前函数的__name__属性来正确控制测试的名称在xunit输出中(例如,参见here)。

因为我不想每次都像这样硬编码函数的名称:

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

我如何以编程方式引用该函数并设置__name__

我曾尝试使用sys._getframe()生成有关当前函数(名称等)的各种属性,我尝试将其与setattr(*something*, "__name__", some_test_name)一起使用,但这并不起作用,因为我无法使用; t似乎可以解决sys._getframe()的哪一部分引用该函数。

1 个答案:

答案 0 :(得分:0)

最后通过SO找到了解决方案:https://stackoverflow.com/a/4506081/1808861

比我想象的要复杂得多,但我现在可以:

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条目。