更改功能模块

时间:2011-07-16 18:04:33

标签: python class module runtime override

我有2个模块A和B. 模块A里面什么都没有,模块B有一个函数'f' 我想将函数'f'分配给模块A,但我想覆盖这个函数 globals ,因为我希望这个函数使用A模块变量。

但是我遇到了一些问题。用这个简单的代码:

print A
print B
print '---'
from copy import deepcopy 
setattr(A, 'f', deepcopy(B.f))
A.f.__module__ = A
A.f.__globals__['__name__'] = 'A'
print A
print B

我得到了以下结果:

<module 'A' from '<path>/A/__init__.pyc'>
<module 'B' from '<path>/B/__init__.pyc'>
---
<module 'A' from '<path>/A/__init__.pyc'>
<module 'A' from '<path>/B/__init__.pyc'>

当我只更改一个全局键函数时,为什么模块名称会发生​​变化?如何防止它?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用functools.update_wrapper

A.f = functools.update_wrapper(wrapper=B.f, wrapped=A.f)

这会修改B.f,但会对A.f__module____name____doc__的各个方面进行修改,请参阅{{1模块源代码)。因为你真的没有说过你想要完成的事情(而不是你想要完成的事情),我真的不能说这是不是你想要的。