Python 可继承函数

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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') 之类的函数对象,并在其上运行测试等。

以上是关于Python 可继承函数的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中扩展继承函数的行为

在 Python 中为类提供可选函数的最佳实践

python super()函数的用法与多重继承

我需要用继承实现 C# 深拷贝构造函数。都有哪些图案可供选择?

Python-类继承

Python基础总结之初步认识---class类的继承(下)。第十五天开始(新手可相互督促