# https://ja.stackoverflow.com/questions/42919/python3-%E6%A8%99%E6%BA%96%E9%96%A2%E6%95%B0%E3%81%AB%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%E5%87%A6%E7%90%86%E3%82%92%E5%85%A5%E3%82%8C%E3%81%9F%E3%81%84


# 本物の組込みprint関数の値を保存しておく
orig_print = print

# 自前のprint用関数を定義する
def my_print(*args):
    orig_print("# カスタム版printが呼ばれました")   # 追加したい処理
    return orig_print(*args)   # 元のprintの呼び出し

# トップレベル（組込み識別子の名前空間）のprintを自前のものにする
import builtins
builtins.print = my_print

# このファイルでprintという変数は定義されていないので、
# ここでのprintはトップレベル（組込み識別子の名前空間）のprintとなる
# そして、それは上で置き換え済み
print("hello, world")