在不破坏兼容性或循环导入的情况下将 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
考虑一个 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