カテゴリー
Uncategorized

[Python] 単純に危険なだけの手法

#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

ここで書き換えられる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です