python - 修补 python 对象以将默认值添加到方法 kwargs

标签 python

我想修补一些使用来自外部模块的对象的代码。

这个对象的一个​​方法被到处调用,我需要在所有这些调用中设置一个新的默认 kwarg。

与其添加这么多重复的代码,我认为更改对象方​​法会更好。最干净的方法是什么?

最佳答案

这称为 monkey-patching并且没有“干净”的版本。

如果需要更换方法bar在一个类(class)Foo ,使用此代码:

oldMethod = Foo.bar
def newMethod(self, **kwargs):
    ... fix kwargs as necessary ...
    oldMethod(self, **kwargs)
Foo.bar = newMethod
  • 首先,我们将旧方法句柄保存在变量
  • 中。
  • 然后我们将新方法定义为一个函数。第一个参数必须是 self ,就好像这个函数在一个类中一样。
  • 要调用原始方法,我们使用 oldMethod(self, ...) .这将获取方法指针,并以实例作为第一个参数调用它。 self.oldMethod()不起作用,因为我们不在 class 中上下文(我认为)。
  • 最后,我们在类中安装已修补的方法。

  • 有关的:
  • http://mflerackers.wordpress.com/2012/02/01/modifying-python-classes-at-run-time/
  • 关于python - 修补 python 对象以将默认值添加到方法 kwargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27784095/

    相关文章:

    python - PyTorch 中带有 dropout 正则化的逻辑回归

    python - 保存临时文件

    python - 使用不带链式索引的 ILOC

    python - 为什么这段代码在 Linux 上有效,但在 Windows 上却无效?

    python - 使用 python 扫描文件夹内所有已确定的文件

    python - 如何在PyQt4中使用QInputMask和QDoubleValidator?

    python - Pandas 使用 "larger"DataFrames 追加性能连接/追加

    python - 如何在 Pandas 数据框中找到每天的第一个和最后一个值

    python - 模块未找到错误: No module named 'keras' in AI DevCloud Intel

    python - 为现有值中的新值列创建循环