【问题标题】:Python - update current function __name__ attribute programaticallyPython - 以编程方式更新当前函数 __name__ 属性
【发布时间】:2017-06-18 22:47:10
【问题描述】:

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

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

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),但这不起作用,因为我似乎无法弄清楚哪个部分的sys._getframe() 引用了该函数。

【问题讨论】:

  • 为什么不只是def some_test_name():
  • 在函数之外做那个,或者写一个装饰器来做那个。
  • 我也认为检查模块可以帮助您获取函数的名称。
  • @user2357112 函数包含生成器,但是nose+xunit 使用函数名称作为测试名称,当您希望使用生成的测试名称时这是不准确的。
  • 设置function.__name__有什么问题?你想如何引用函数?不太清楚你想在这里做什么。

标签: python python-2.7 function


【解决方案1】:

终于通过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 条目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2019-09-20
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    相关资源
    最近更新 更多