在不破坏兼容性或循环导入的情况下将 Python 函数移动到模块

Move Python function to module without breaking compatibility or cyclic imports

考虑一个 Python 模块 fmod.py:

def f(x):
     print(x)

def g():
     f("g")

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

import fmod

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

"keep" 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