首页 > 解决方案 > 如何子类化 Python 中的内置函数类?

问题描述

在 Python 中,您可以通过属性将元数据添加到函数中,如 Python数据模型中所述:

函数对象还支持获取和设置任意属性,例如,可以将元数据附加到函数。

我有一个函数将另一个函数作为输入,期望它有这样的元数据属性可用。当使用类型Callable来注释这个函数时,我不能强制这个属性存在。因此,我想创建一个内置function类的子类,以确保元数据的存在,我可以在类型注释中使用它。

只有一个小问题:除了运行时,我找不到对此类的引用。例如builtins,据我所知,该模块没有函数类。

标签: pythonpython-3.x

解决方案


在 Python中不能对内置函数类型进行子类化。

>>> class MyFunction(type(lambda: None)):
...     pass
...
TypeError: Error when calling the metaclass bases
    type 'function' is not an acceptable base type

考虑改用可调用类:创建一个用户定义的类型,该类型记录预期的元数据属性并定义一个__call__方法。


推荐阅读