如果模块的属性绑定到在与该属性同名的同一模块中定义的函数,我该如何直接从模块外部调用该函数?
例如,builtins.__import__
属性默认绑定到builtins.__import__
函数。
如果我将builtins.__import__
属性重新绑定到与builtins.__import__
函数不同的函数
如何通过builtins.__import__
属性调用新函数?将builtins.__import__
属性视为一个函数,并像builtins.__import__(argument)
一样调用它?
如果builtins.__import__
属性隐藏了builtins.__import__
函数,我怎么能调用它?
感谢。
答案 0 :(得分:3)
首先,从技术上讲,功能没有名称 - 没有'功能a
'这样的东西,只有属性/属性/参数a
指向一个函数(在内存中)。因此,除非你知道原始函数在内存中的位置 - 并且(大大简化)了什么属性/变量代表,(包装)指针 - 它将为你丢失。如果你不知道在哪里看,你怎么能找到一些东西(除了通过记忆一点一点地手动并试图找出你正在寻找的结构)以及什么时候你不知道它的结构(因为如果你知道你可以重新创建函数而不是搜索它)?
事实上,Python通常足够聪明,可以释放丢失其引用计数的任何对象的内存,否则很多Python将停止工作(或者会在操作的最初几秒内创建内存下沉孔),所以如果{{ 1}}函数除此之外没有其他引用(据我所知它在标准CPython中没有),一旦你覆盖它指向其他函数,它将永远消失(在当前进程的持续时间内) 。
当然,鉴于所讨论功能的重要性,我敢打赌仍有一两个级别的参考,所以它可能不会收集垃圾,但找到一个不同的&#39 ;路线'从SO回答范围开始,这个功能将是一个耗时的任务。
如果你希望利用这个事实来构建一个沙盒Python' - 不要。许多人之前尝试过并且失败了,因为你永远不应该低估一些人愿意投入寻找解决方法的时间。只需在一次性虚拟机中运行你的Python实例,过上无忧无虑的生活(直到有人真的,非常专注地找到了解决问题的方法)。