私はPythonを勉強して、簡単なチャットボットを作成しています。他のモジュールから変更された変数へのアクセス
# bot.py
class QueueWrapper:
pass
wrapper = QueueWrapper() # also tried with dict
def main():
wrapper.queue = init_queue()
if __name__ == '__main__':
main()
と考えるが、私はボットモジュールからqueue
にアクセスしたい他のモジュールがあるが、このモジュールから関数がbot.py
モジュールが呼び出さしまった後しばらくして呼び出されます:私は、主な機能を持つモジュールを持って考えてみましょう
# another_module.py
from bot import wrapper
def create_job():
wrapper.queue.do_smth() # <- error. object has no attribute ...
そして、私はwrapper
対象にする必要がありqueue
にアクセスしようとしたとき、私は取得し、エラーがwrapper
にはqueue
はありませんと言って。しかし、デバッグモードでbot
モジュールを実行すると、明らかに、wrapper.queue
にオブジェクトが含まれていることがわかります。しかし、create_job
の機能がanother_module.py
から呼び出された場合、queue
がwrapper
にあることがわかりません。
ここに私の意見では問題がmain()
とinit_queue()
は、作業が終了していたが、モジュール自体がその前にanother_module
にインポートされます後bot.py
からVAR queue
が初期化されるということです。
create_job()
が呼び出されたときにwrapper.queue
がどのように初期化されるのですか。
ありがとうございます! queue
属性が自動的に初期化されるように、それが最初にアクセスしたときに
__main __-部分が輸入に実行されません。 'wrapper.queue = init_queue()'を常に設定したい場合は、 'wrapper = ... 'の定義の下に置くべきです –
...またはQueueWrapperの' __init__'メソッドに入れてください。 –
あなたは私の答えを試しましたか?それがあなたの問題を解決しなければ、理由を説明してください。それを改善してみてください。 – ekhumoro