【发布时间】:2012-08-30 05:49:59
【问题描述】:
我正在扩展一个开源 python 产品,但我不能直接更改代码,因为这会使与上游更改的合并变得更加困难。
因此,我不想直接更改函数,而是想从另一个地方操作函数内部的局部变量。我想向在函数内部创建的字典添加一个键作为局部变量。我将如何更改此本地 dic 变量?这可能吗?
以下面的代码为例:
import functools
class API(object):
def update_resources(self, host):
bla = sflkj
dic = {
'cpu': 5,
'memory': 500
}
class APIExtension(API):
def update_resources(self, host):
# But first do our changes to the function here
# The change that I want to do is add a key: 'workload'
# this is the function I want to change the dic variable to include workload
super(APIExtension, self).update_resources
【问题讨论】:
-
"...这将使与上游更改的合并变得更加困难。"这就是 git 的用途。或者提供一个补丁来外部化变量。
-
如果您与上游的分歧太多并直接在上游的文件中更改所有内容,您将无法轻松应用补丁和挑选。它是关于 openstack 的,它提供了一种扩展 api 的方法,因此我们创建了自己的 API 扩展,这是建议的方式。我们现在可以轻松地合并错误修复,而不必总是手动应用补丁,因为文件不再匹配。不过我同意你的观点,这是一个很好的观点。为它 +1。
-
您不能操纵局部变量,但您当然可以以某种方式操纵结果。由于我假设在代码的某处使用并应用了局部变量,它不仅具有局部范围,因此您可能希望准确地“挂钩”在那里。但是如果没有更多细节,很难帮助你。另一种选择是完全覆盖 update_resources,而不调用 super。
标签: python