モジュールを動的にインポートして更新したいと考えています。より効率的な方法は、 abarnet が示唆するimportlib
ようにandを使用することです。ただし、別の解決策は、 andを使用することです。以下に、文字列に格納されたモジュールをその場で呼び出して使用する方法を示すサンプル スクリプトを示します。ただし、このモジュールを関数で呼び出すと(以下を参照)、機能せず、エラー メッセージが表示されます。これが機能しない理由を指摘するために、新鮮な目が必要です。ありがとう。imp.reload
exec
compile
test
global name 'FRUITS' is not defined
module_as_string = """
class FRUITS:
APPLE = "his apple"
PEAR = "her pear"
class foo(object):
def __init__(self):
self.x = 1
def get_fruit(self):
return FRUITS.APPLE
_class_name = foo """
def get_code_object():
return compile(module_as_string, "<string>", "exec")
def test():
exec(get_code_object())
a = eval("_class_name()")
print(a.get_fruit())
if __name__ == "__main__":
# below doesn't work
test()
# below works
exec(get_code_object())
a = eval("_class_name()")
print(a.get_fruit())
-- 編集: 質問する価値がないと思われる場合は、この質問を改善する方法を教えてください。反対票を投じないでください。ありがとう。