from...import
ステートメントが使用されているメソッドのオーバーライドに問題があります。問題を説明するいくつかの例:
# a.py module
def print_message(msg):
print(msg)
# b.py module
from a import print_message
def execute():
print_message("Hello")
# c.py module which will be executed
import b
b.execute()
print_message(msg)
a または b モジュールのコードを変更せずにメソッドをオーバーライドしたいと思います。私は多くの方法で試しましたがfrom...import
、元の方法をインポートします。コードを次のように変更したとき
import a
a.print_message
それから私は自分の変化を見ます。
この問題を解決する方法を提案できますか?
- - - - - - - - - アップデート - - - - - - - - -
私は例えば以下のようにそれをやろうとしました:
# c.py module
import b
import a
import sys
def new_print_message(msg):
print("New content")
module = sys.modules["a"]
module.print_message = new_print_message
sys.module["a"] = module
しかし、これはfor...import
ステートメントを使用している場所では機能しません。import a に対してのみ機能していますが、私が書いたように、 b.py および a.py モジュールのコードを変更したくありません。