为什么不是';在我的Python shell(CJSH)中,这个特定的猴子补丁覆盖工作

为什么不是';在我的Python shell(CJSH)中,这个特定的猴子补丁覆盖工作,python,shell,emacs,python-3.x,monkeypatching,Python,Shell,Emacs,Python 3.x,Monkeypatching,我在上有一个实验性的shell,除其他外,它旨在减少查找隐藏在hierarchies中的文件的时间,并[不完全]允许无限Python定制,就像EMACS允许无限Lisp定制一样 我首先对它进行了重构,删除了一些函数,这些函数会限制用户设置变量的能力,这些变量将比exec()更有效,然后在其他函数中进行重构,以提供用于monkey补丁的钩子 我已经成功地定义和调用了新函数,并且成功地对其他区域进行了修补,这是修补shell最明显的方法之一,它覆盖了提示用户输入的函数,因此用户可以自定义提示。这个函

我在上有一个实验性的shell,除其他外,它旨在减少查找隐藏在hierarchies中的文件的时间,并[不完全]允许无限Python定制,就像EMACS允许无限Lisp定制一样

我首先对它进行了重构,删除了一些函数,这些函数会限制用户设置变量的能力,这些变量将比exec()更有效,然后在其他函数中进行重构,以提供用于monkey补丁的钩子

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

如果要使用CJSH shell,最终用户语法是缩进行是Python行,未缩进行是shell行


我在这方面做了什么可以阻止电话重新绑定的事情吗?我能做些什么来说“请从头开始查找吗?”

猴子补丁函数会改变原始上下文中的作用域。要测试这一点,请尝试创建两个不同的文件并对其进行修补:

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!"