将 Python 函数移动到模块,而不会破坏兼容性或循环导入



考虑一个Python模块fmod.py

def f(x):
print(x)
def g():
f("g")

现在g()函数应该移动到gmod.py

import fmod
def g():
fmod.f("g")

"保持"fmod.g()可用于向后兼容的最佳方法是什么?


尝试 a(

from gmod import g
def f(x):
print(x)

由于周期性导入,这将不起作用:来自其他地方的import gmod失败。


尝试 b(

import gmod
def f(x):
print(x)
g = gmod.g

由于同样的问题,这仍然不起作用。


尝试 c(

def f(x):
print(x)
def g(*args, **kwargs):
import gmod
return gmod.g(*args, **kwargs)

我认为这有效,但相当复杂。

有没有更好的方法?

您可以使用最后一个选项,也可以通过以下方式编辑__init__.py文件:

import fmod
import gmod
fmod.g = gmod.g

然后,您将能够执行以下操作:

import fmod
fmod.g('x')   #@UndefinedVariable

最新更新