【问题标题】:Patching classes in Python在 Python 中修补类
【发布时间】:2010-11-01 03:52:01
【问题描述】:

假设我有一个要添加额外属性的 Python 类。

有什么区别

import path.MyClass
MyClass.foo = bar

并使用类似的东西:

import path.MyClass
setattr(MyClass, 'foo', bar)

?

如果不是,为什么人们似乎做第二个而不是第一个? (例如这里http://concisionandconcinnity.blogspot.com/2008/10/chaining-monkey-patches-in-python.html

【问题讨论】:

  • 为什么不用额外的方法更新你的类的定义呢?当您可以简单地编辑类定义时,为什么要做所有这些“神奇”的东西?
  • 当我问这个问题时,该类来自一个我们不想更改的库;我们不能子类化它。虽然大体上同意。

标签: python class monkeypatching


【解决方案1】:

这些语句是等效的,但可能会使用 setattr,因为它是两者中最动态的选择(使用 setattr,您可以使用变量作为属性名称。)

见:http://docs.python.org/library/functions.html#setattr

【讨论】:

  • 同意。特别是,这将是 OP 引用的博客条目中执行修补的方式所必需的——monkeypatch 方法的内部不知道该方法的名称。
  • 谢谢。但我更新了这个问题,因为我仍然没有看到一个比另一个更有活力
  • 啊...不,我明白你的意思了...抱歉.. doh!
猜你喜欢
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 2015-11-22
  • 2021-09-03
  • 2012-09-27
  • 2012-09-01
  • 1970-01-01
  • 2015-01-30
相关资源
最近更新 更多