【发布时间】:2021-02-11 10:29:25
【问题描述】:
我正在查看这样的代码:
def foo():
return 42
foo.x = 5
这显然为函数对象添加了一个名为foo 的成员。我发现这非常有用,因为它使这些函数对象看起来与具有__call__ 函数的对象非常相似。
我必须遵守哪些规则以确保在以后的 Python 更新中不会出现问题,例如我必须避免使用的名称?也许有一个 PEP 或文档部分提到了规则?
【问题讨论】:
-
在 Python 中,这称为猴子补丁。搜索该词会带来大量信息。
-
@FrankYellin 不,这不是猴子修补的例子。没有功能被替换。
-
@MartijnPieters。我已经看到该术语既指对现有代码的修改,也指添加新属性。我会注意到下一个回答者也将其称为猴子补丁。
-
@FrankYellin:早在 1999 年,我就在发明该术语的公司工作。我们特别提到了替换或增强现有功能。这可能涉及在某处设置属性,但这就像将钉子钉在钉子上称为“制作椅子”。 OP 所做的只是在支持属性的对象上设置属性。
标签: python function dynamic attributes