クラス/変数が Python 3 にインポートされたかどうかを検出するにはどうすればよいですか?

user5870134

これは次の内容ですscript_one.py

x = "Hello World"

これは次の内容ですscript_two.py

from script_one import x
print(x)

今、実行した場合script_two.py、出力は次のようになります。

>>> Hello World

必要なのは、xインポートされたかどうかを検出する方法です。
これは、ソース コードが次のようになると私が想像するものですscript_one.py

x = "Hello World"
if x.has_been_imported:
  print("You've just imported \"x\"!")

私が走った場合、script_two.py出力は「すべきである」こと。

>>> Hello World
>>> You've just imported "x"!

これは何と呼ばれていますか、この機能は Python 3 に存在し、どのように使用しますか?

マルティン・ピータース

できません。申し訳ありませんが、これを検出するために費やされた努力は時間の無駄です。

Python インポートは、次の手順で構成されます。

  • を見て、モジュールがすでにロードされているかどうかを確認してくださいsys.modules
    • モジュールがまだロードされていない場合は、ロードします。これにより、 に追加される新しいモジュール オブジェクトが作成されます。このオブジェクトにはsys.modules、トップレベル コードを実行した結果のすべてのオブジェクトが含まます。
  • インポートする名前空間で名前をバインドします。名前のバインド方法は、import選択した正確なバリアントによって異なります。
    • import module名前modulesys.modules[module]オブジェクトにバインドします
    • import module as othername名前othernamesys.modules[module]オブジェクトにバインドします
    • from module import attribute名前attributesys.modules[module].attributeオブジェクトにバインドします
    • from module import attribute as othername名前othernamesys.modules[module].attributeオブジェクトにバインドします

このコンテキストでは、Python の名前は単なる参照であることを理解することが重要です。すべての Python オブジェクト (モジュールを含む) はヒープ上に存在し、それらへの参照の数に応じて変化します。これがどのように機能するかについての入門が必要な場合は、Ned Batchelder による Python 名に関するこの素晴らしい記事を参照してください

あなたの質問は、次の 2 つの方法で解釈できます。

  • モジュールがインポートされたことを知りたい。モジュール内のコードが実行されると ( のようにx = "Hello World")、インポートされます。それのすべて。Python はここだけ xロードするのではなく、オール オア ナッシングです。
  • 他のコードが特定の名前を使用しているかどうかを知りたい。オブジェクトに存在する他の参照を追跡する必要があります。これは、gc.get_referrers()オブジェクト チェーン再帰的にチェックして、他の Python オブジェクトが現在参照してxいる可能性があるものを確認することを含む膨大なタスクです。

後者の目標は、次のシナリオのいずれかでさらに難しくなります。

  • import script_one、次に使用しscript_one.xます。このような参照は、検出するには短すぎる可能性があります。
  • from script_one import x、それからdel xインポートされた名前空間内で他の何かがまだ同じ文字列オブジェクトを参照していない限り、その参照はなくなり、検出できなくなります。
  • import sys; sys.modules['script_one'].x 同じ文字列オブジェクトを参照する正当な方法ですが、これはインポートとしてカウントされますか?
  • import script_onelist(vars(script_one).values())モジュールで定義されているすべてのオブジェクトのリストを作成しますが、これらの参照はリスト内のインデックスであり、名前が付けられていません。これは輸入としてカウントされますか?

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

virtualenv内にpython3-giをインストールするにはどうすればよいですか?

分類Dev

Google CloudConsoleにPython3をインストールするにはどうすればよいですか?

分類Dev

14.04にpython3-djangoをインストールするにはどうすればよいですか?

分類Dev

Python 3でpipをインストールするにはどうすればよいですか?

分類Dev

Django for Python 3.xをインストールするにはどうすればよいですか?

分類Dev

Python3用のnetfilterqueueをインストールするにはどうすればよいですか?

分類Dev

Django for Python 3.xをインストールするにはどうすればよいですか?

分類Dev

Python 3用のnltkをインストールするにはどうすればよいですか?

分類Dev

Python 3をサポートするOSXにvimをインストールするにはどうすればよいですか?

分類Dev

インストールされているMercurial(hg)がPython2またはPython3を使用しているかどうかを確認するにはどうすればよいですか?

分類Dev

Python 3でネストされたリストから複数のアイテムを削除するにはどうすればよいですか?

分類Dev

Pythonの関数で指定されたドメインで3次元をプロットするにはどうすればよいですか?

分類Dev

SublimeTextがPython3のアノテーションをサポートするようにするにはどうすればよいですか?

分類Dev

python2.7にインストールされたときにpython3.x用のNumpyとpip3をインストールするにはどうすればよいですか?コンダを使用していますか?

分類Dev

Python 3にDjangoをインストールするにはどうすればいいですか?

分類Dev

Python 3.xをDebianにインストールするにはどうすればいいですか?

分類Dev

インポートされたライブラリのメンバー関数をPython3コンソールで印刷するにはどうすればよいですか?

分類Dev

if __name __ = '__ main__'ブロックを使用してPython3で相対インポートを使用するにはどうすればよいですか?

分類Dev

カスタムPython3クラスでプリティプリントをサポートするにはどうすればよいですか?

分類Dev

Ubuntuに最新のPython2.7.Xまたは3.Xをインストールするにはどうすればよいですか?

分類Dev

SQLite3データベースがPythonで接続されているかどうかを確認するにはどうすればよいですか?

分類Dev

ライブラリにインストールされているものではなく、Homebrewにインストールされているpython3バージョンを使用するにはどうすればよいですか?

分類Dev

Python 3でランダムな文字のセットを整列された文字列に入れるにはどうすればよいですか?

分類Dev

関数でドライバーが呼び出されたときにPython3でSeleniumWebdriverブラウザーを開いたままにするにはどうすればよいですか?

分類Dev

Python 3を使用して、Unicodeテキストとして保存されたCSV拡張子を持つExcelファイルをインポートするにはどうすればよいですか?

分類Dev

Pythonで3次スプライン補間を実行するにはどうすればよいですか?

分類Dev

Python 3でユーザーに数値を入力させるにはどうすればよいですか?

分類Dev

Python3のループで再起動するたびに値を変更する変数を使用してリストをインクリメントするにはどうすればよいですか?

分類Dev

指定された実行可能ファイルが実行されているかどうかをチェックするこのサブプロセス関数を、Python 2と3の両方で機能するように変更するにはどうすればよいですか?

Related 関連記事

  1. 1

    virtualenv内にpython3-giをインストールするにはどうすればよいですか?

  2. 2

    Google CloudConsoleにPython3をインストールするにはどうすればよいですか?

  3. 3

    14.04にpython3-djangoをインストールするにはどうすればよいですか?

  4. 4

    Python 3でpipをインストールするにはどうすればよいですか?

  5. 5

    Django for Python 3.xをインストールするにはどうすればよいですか?

  6. 6

    Python3用のnetfilterqueueをインストールするにはどうすればよいですか?

  7. 7

    Django for Python 3.xをインストールするにはどうすればよいですか?

  8. 8

    Python 3用のnltkをインストールするにはどうすればよいですか?

  9. 9

    Python 3をサポートするOSXにvimをインストールするにはどうすればよいですか?

  10. 10

    インストールされているMercurial(hg)がPython2またはPython3を使用しているかどうかを確認するにはどうすればよいですか?

  11. 11

    Python 3でネストされたリストから複数のアイテムを削除するにはどうすればよいですか?

  12. 12

    Pythonの関数で指定されたドメインで3次元をプロットするにはどうすればよいですか?

  13. 13

    SublimeTextがPython3のアノテーションをサポートするようにするにはどうすればよいですか?

  14. 14

    python2.7にインストールされたときにpython3.x用のNumpyとpip3をインストールするにはどうすればよいですか?コンダを使用していますか?

  15. 15

    Python 3にDjangoをインストールするにはどうすればいいですか?

  16. 16

    Python 3.xをDebianにインストールするにはどうすればいいですか?

  17. 17

    インポートされたライブラリのメンバー関数をPython3コンソールで印刷するにはどうすればよいですか?

  18. 18

    if __name __ = '__ main__'ブロックを使用してPython3で相対インポートを使用するにはどうすればよいですか?

  19. 19

    カスタムPython3クラスでプリティプリントをサポートするにはどうすればよいですか?

  20. 20

    Ubuntuに最新のPython2.7.Xまたは3.Xをインストールするにはどうすればよいですか?

  21. 21

    SQLite3データベースがPythonで接続されているかどうかを確認するにはどうすればよいですか?

  22. 22

    ライブラリにインストールされているものではなく、Homebrewにインストールされているpython3バージョンを使用するにはどうすればよいですか?

  23. 23

    Python 3でランダムな文字のセットを整列された文字列に入れるにはどうすればよいですか?

  24. 24

    関数でドライバーが呼び出されたときにPython3でSeleniumWebdriverブラウザーを開いたままにするにはどうすればよいですか?

  25. 25

    Python 3を使用して、Unicodeテキストとして保存されたCSV拡張子を持つExcelファイルをインポートするにはどうすればよいですか?

  26. 26

    Pythonで3次スプライン補間を実行するにはどうすればよいですか?

  27. 27

    Python 3でユーザーに数値を入力させるにはどうすればよいですか?

  28. 28

    Python3のループで再起動するたびに値を変更する変数を使用してリストをインクリメントするにはどうすればよいですか?

  29. 29

    指定された実行可能ファイルが実行されているかどうかをチェックするこのサブプロセス関数を、Python 2と3の両方で機能するように変更するにはどうすればよいですか?

ホットタグ

アーカイブ