Published On: 1970-01-01|Last Updated: 1970-01-01|Categories: Uncategorized|
#hack.py
import __builtin__
__builtin__._open = open
__builtin__.open = '__builtin__'

としておいて、

>>> open
<built-in function open>
>>> import hack
>>> open
'__builtin__'
>>> eval('open', {'open': 'globals'}, {'open': 'locals'})
'locals'
>>> eval('open', {'open': 'globals'}, {})
'globals'
>>> eval('open', {}, {})
'__builtin__'

となる。どう考えても pythonic ではない。

さらにどっかの名前空間に取り込まれてる場合は

>>> import gc
>>> for ns in gc.get_referrers(open):
for k, v in ns.items():
if v == open:
print k

ここで書き換えられる。

関連