为什么这个特定的猴子修补覆盖不能在我的Python shell(CJSH)中工作

时间:2012-10-06 03:47:37

标签: python shell emacs python-3.x monkeypatching

我在http://JonathansCorner.com/cjsh有一个实验shell,其中包括减少查找埋藏在heirarchies中的文件的时间,以及[不完美]允许无限制的Python自定义方式,EMACS允许无限制的Lisp自定义。

我首先重构它以删除限制用户设置变量的函数,这些函数会比exec()更长,然后在其他函数中重构,以便为猴子修补提供钩子。

我已成功定义和调用新函数,除了最明显的修补shell之一的方法之外,我已经成功地修补了其他区域,以覆盖提示用户输入的功能,以便用户可以有一个自定义的提示。这个函数是use_main_prompt(),除了可自定义的行为之外,我从来没有重写过它。

如果你想使用CJSH shell,那么enduser语法是缩进的行是Python行,而未缩进的行是shell行。

我在http://JonathansCorner.com/cjsh/download.cgi中有什么可以防止重新接通电话的事吗?我有什么可说的吗“请从头开始查看,好吗?”

1 个答案:

答案 0 :(得分:0)

Monkey修补功能会导致原始上下文中的范围发生更改。要对此进行测试,请尝试创建两个不同的文件并对其进行修补:

something.py

def patchable_function():
    return "I have not been patched yet"

def another_function():
    return patchable_function()

else.py

import something
from something import another_function

print another_function() # "I have not been patched yet"
something.patchable_function = lambda : "I AM PATCHED!"
print another_function() # "I AM PATCHED!"