我有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'>
当我只更改一个全局键函数时,为什么模块名称会发生变化?如何防止它?
答案 0 :(得分:1)
您可以尝试使用functools.update_wrapper
:
A.f = functools.update_wrapper(wrapper=B.f, wrapped=A.f)
这会修改B.f
,但会对A.f
,__module__
,__name__
和__doc__
的各个方面进行修改,请参阅{{1模块源代码)。因为你真的没有说过你想要完成的事情(而不是你想要完成的事情),我真的不能说这是不是你想要的。