导入后覆盖模块功能 - Python
Overriding module function after it is imported - Python
假设我们有三个 python 模块:app.py、commons.py 和 c.py
commons.py:
def func():
pass
def init(app)
global func
func = app.func
app.py:
import commons
import c
# Doing some initialization so that we are ready to override the function
c.foo()
init(app) # the app object contains a function called func which we wish to overwrite in commons.py
c.foo()
c.py:
from commons import *
def foo():
func()
我要实现的是第一次调用c.foo什么都不做,第二次调用app.func。我项目中的每个模块都依赖于 commons.py 中的函数,并且该函数必须在运行时声明,因为它附加到一个对象。
有没有办法在python中通过引用导入并改变所有模块中函数的指针?
到目前为止我所做的是在每个模块中都有一个 init 函数并简单地覆盖空的 lambda 函数,但这似乎是一个糟糕的解决方案。
您可以通过更高级别的间接访问来实现此目的:
commons.py
def normalFunc():
pass
def func():
normalFunc()
def init(app)
global normalFunc
normalFunc = app.func
这行得通,因为任何其他具有正常的模块:from commons import foo
和 foo()
仍然调用相同的 foo()
.
只是每次调用 init()
函数时,foo()
的内部结构都会发生变化。
假设我们有三个 python 模块:app.py、commons.py 和 c.py
commons.py:
def func():
pass
def init(app)
global func
func = app.func
app.py:
import commons
import c
# Doing some initialization so that we are ready to override the function
c.foo()
init(app) # the app object contains a function called func which we wish to overwrite in commons.py
c.foo()
c.py:
from commons import *
def foo():
func()
我要实现的是第一次调用c.foo什么都不做,第二次调用app.func。我项目中的每个模块都依赖于 commons.py 中的函数,并且该函数必须在运行时声明,因为它附加到一个对象。
有没有办法在python中通过引用导入并改变所有模块中函数的指针?
到目前为止我所做的是在每个模块中都有一个 init 函数并简单地覆盖空的 lambda 函数,但这似乎是一个糟糕的解决方案。
您可以通过更高级别的间接访问来实现此目的:
commons.py
def normalFunc():
pass
def func():
normalFunc()
def init(app)
global normalFunc
normalFunc = app.func
这行得通,因为任何其他具有正常的模块:from commons import foo
和 foo()
仍然调用相同的 foo()
.
只是每次调用 init()
函数时,foo()
的内部结构都会发生变化。