bou*_*472 2 python decorator python-import python-3.x
我导入一些模块Foo
并使用Foo
该模块中定义的类.该类具有f
调用g
该模块Foo
本身导入的另一个函数的函数module_with_g
.我想在实例化时重新定义g
该f
用法的定义Foo
.这里有3个文件显示了这种情况.
Foo.py
from module_with_g import g
class Foo:
def f(self):
x = 'bar'
g(x)
Run Code Online (Sandbox Code Playgroud)
module_with_g.py
def g(x):
print(x + x)
Run Code Online (Sandbox Code Playgroud)
module_with_modified_Foo_f.py
import Foo
def new_g(x):
print(x + x + x)
if __name__ == '__main__':
foo = Foo.Foo()
foo.f()
Run Code Online (Sandbox Code Playgroud)
运行最后一个脚本给出barbar
.我想要的是让我们foo.f
使用自己的功能而不是它g
,我希望得到它barbarbar
.
我自己的尝试是尝试使用装饰器以某种方式重新定义foo.f
,但我没有任何运气.
module_with_modified_Foo_f.py
import Foo
def new_g(x):
print(x + x + x)
def redefine_f(f):
def redefined_f(*args, **kwargs):
return f(*args, **kwargs)
#redefined_f.g = new_g
return redefined_f
if __name__ == '__main__':
foo = Foo.Foo()
# foo.f = redefine_f(foo.f)
# foo.__dict__['g'] = new_g # another approach
foo.f()
Run Code Online (Sandbox Code Playgroud)
我可以做到这一点,我已经修改了如Foo.g = new_g
module_with_modified_Foo_f.py
import Foo
def new_g(x):
print(x + x + x)
Foo.g = new_g
if __name__ == '__main__':
foo = Foo.Foo()
foo.f()
Run Code Online (Sandbox Code Playgroud)
我得到了结果 - barbarbar
归档时间: |
|
查看次数: |
927 次 |
最近记录: |