python - 访问对象时运行 python 命令

标签 python python-2.7 python-module

我有以下命令:

a = imp.load_source("a", r"some_path\some_source.py")

所以a是一个模块对象,我可以从中访问和运行some_source.py内的所有函数。 python 中有没有一种方法可以在使用 some_source 的任何函数之前运行附加功能,但不更改 some_source.py实例如果 some_source.py 具有函数 foo1foo2 ... foo100,那么我想要命令

a.foo5() 

实际执行:

imp.reload(a)
a.foo(5)

这应该应用于所有 100 个 foo 函数。

需要明确的是,我希望只需运行与团队中每个人都习惯的命令相同的命令即可实现添加的功能 - a.foo5()。我不希望他们必须创建某种类或调用与他们习惯不同的方法。

最佳答案

你可以尝试像这样装饰你的模块:

class ReloadingModule:
    def __init__(self, module):
        self.module = module

    def __getattr__(self, attr):
        print("reloading {}...".format(self.module.__name__))
        imp.reload(self.module)
        return getattr(self.module, attr)


import this
this = ReloadingModule(this)

print('\n\n',this.c, '\n\n')
print('\n\n',this.s, '\n\n')

输出:

reloading this...
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
[...]


 97 


reloading this...
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
[...]

 Gur Mra bs Clguba, ol Gvz Crgref

Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
[...]

通过一些数学计算:

import math
math = ReloadingModule(math)

print(math.pi)
print(math.sin(math.pi/2))

输出:

reloading math...
3.141592653589793
reloading math...
reloading math...
1.0

关于python - 访问对象时运行 python 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49895190/

相关文章:

python - 带网格搜索的火车

python - 在 openCV 中使用 waitkey() 时出错

python - Bottle 中的原始输入模拟

python - 如何检查模块是否已安装在 Python 中,如果没有,则在代码中安装它?

python - 如何导入其他 Python 文件?

python - 以元组为键将字典转换为数据框

Python 破折号 : Fitting a table and a graph in one row of a grid

python - sklearn中分类器输出值的范围

python - OpenCV VideoWriter:播放视频的问题

python - 用本地目录覆盖 virtualenv 中的模块