質問: True @ユーザー関数のprint def user_print(message, interrupt_flag=INTERRUPT) if interrupt_flag: interrupt() print(message) ``` みたいな方法になるのかな、と漠然と考えています。
回答: 組み込み関数を上書きしたいというのであれば、builtinsモジュールを使ってください。 ``` # coding: utf-8 import sys if sys.version_info.major < 3: import __builtin__ as builtins else: import builtins print_original = builtins.__dict__['print'] def print_custom(s): print_original('Interrupt.') print_original(s) builtins.__dict__['print'] = print_custom print('Hello, world!') ``` ただ、注意が必要です。 上書きしたprint関数でprintを呼びだせば、当然再帰的に関数が呼ばれる事になります。 (上記の例では、そのためにオリジナルのprint関数を「print_original」に保存しています) builtinsモジュールを変更すると、importしたモジュールにも影響を及ぼします。 他にこのようなソースコードは見かけないので、ある意味禁じ手なのかぁ...。 ちなみに、上記のソースコードは、python2では動きません。 おそらく、printが関数ではなく文だからではないかと思いますが。