Dor*_*pia 8 python monkeypatching built-in shadowing
我想__init__.py通过以下方式为我的包的文件中的另一个函数分配另一个函数:
llen = len
len = lambda x: llen(x) - 1
Run Code Online (Sandbox Code Playgroud)
它工作正常,但只在__init__.py文件中.如何让它影响我的包中的其他模块?
当您尝试加载未定义为模块级全局或局部函数的名称时,Python 会在__builtin__(builtins在 Python 3 中)模块中查找它。__builtins__在 Python 的两个版本中,该模块在全局范围内也是可用的。你可以修改这个模块,这不仅会影响你的代码,还会影响你的代码运行后运行的任何地方的任何Python代码!
import __builtin__ as builtins # import builtins in python 3
llen = len
builtins.len = lambda a:llen(a) - 1
Run Code Online (Sandbox Code Playgroud)