【问题标题】:Python inheritable functionsPython 可继承函数
【发布时间】:2014-08-28 11:57:30
【问题描述】:

在 Python 中有没有一种方法可以“类型”函数或函数 继承测试套件?我正在做一些评估几种不同的工作 具有不同标准的不同功能的实现(对于 例如,我可以根据速度评估不同的排序函数 数组大小和内存要求)。和我 希望能够自动测试功能。所以我会 就像一种将函数识别为实现的方法 某个操作员,以便测试套件可以获取所有功能 这是该运算符的实现并通过 测试。

我最初的想法是使用类和子类,但是类 为此目的,语法有点繁琐,因为我首先会拥有 在我可以调用它之前创建一个类的实例 函数...除非有办法让 init 返回 None 以外的类型。

可以以这种方式使用元类或对象吗?

【问题讨论】:

    标签: python oop inheritance metaclass


    【解决方案1】:

    函数是 Python 中的第一类对象,您可以这样对待它们,例如通过setattr添加一些元数据:

    >>> def function1(a):
    ...     return 1
    ... 
    
    >>> type(function1)
    <type 'function'>
    
    >>> setattr(function1, 'mytype', 'F1')
    >>> function1.mytype
    'F1'
    

    或者同样使用一个简单的参数化装饰器:

    def mytype(t):
        def decorator(f):
            f.mytype = t
            return f
        return decorator
    
    @mytype('F2')
    def function2(a, b, c):
        return 2
    

    【讨论】:

      【解决方案2】:

      我很抱歉,因为我无法发表评论,只是为了澄清您所说的“我首先必须创建该类的一个实例,然后才能将其作为函数调用......”这是否无法完成您想要做的事情?

          class functionManager:
      
              def __init__(testFunction1 = importedTests.testFunction1):
                 self.testFunction1() = testFunction1
      
      
          functionManager = functionManager()
      

      然后只需将from functionManagerFile import functionManager 行包含在您想使用的任何地方?

      【讨论】:

      • 它有效,但如果可能的话,我想尽量减少语法。
      • 也许使用装饰器?就像定义诸如 @candidate_function('some_key') 之类的函数对象,并在其上运行测试等。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      • 2010-09-18
      • 2013-09-24
      • 2020-09-10
      • 1970-01-01
      相关资源
      最近更新 更多