2

どこかで構成用のpythonコードを見たことがありますが、それを理解できません。

コードは次のとおりです。

import sys, os.path

Module = type(sys) # What does this line for? 

modules = {}

print dir(Module)

def load(fullpath, env={}, module=Module):
    try:
        code = open(fullpath).read()
    except IOError:
        raise ImportError, 'No module named %s' % fullpath

    filename = os.path.basename(fullpath)

    try:
        return modules[filename]
    except KeyError:
        pass

    #################################### 
    #### Most confused 

    m = module(filename) 
    m.__module_class__ = module
    m.__file__ = fullpath

    m.__dict__.update(env)

    exec compile(code, filename, 'exec') in m.__dict__
    ####################################

    modules[filename] = m

    return m


def unload(m):

    filename = os.path.basename(m.__file__)
    del modules[filename]

    return None


def reload(m):
    fullpath = m.__file__

    try:
        code = open(fullpath).read()
    except IOError:
        raise ImportError, 'No module named %s' % fullpath

    env = m.__dict__
    module_class = m.__module_class__

    filename = os.path.basename(fullpath)
    m = module_class(filename)

    m.__file__ = fullpath
    m.__dict__.update(env)
    m.__module_class__ = module_class

    exec compile(code, filename, 'exec') in m.__dict__
    modules[filename] = m

    return m
  1. Module = type(sys) にする理由がわかりません
  2. var m とその組み込みメソッドは何をしますか?ドキュメントはどこにありますか?
  3. なぜdict varを定義するのですか?
4

1 に答える 1

2

行の上のコードでは:

Module = type(sys)

モジュール型の変数を作成します。インタープリターを開いて、次のコードを入力できます。

import sys
Module = type(sys)
help(Module)

以下が表示されます。

モジュールbuiltinのクラス モジュールに関するヘルプ:

クラス モジュール (オブジェクト) | モジュール(名前[, ドキュメント]) |
| | モジュール オブジェクトを作成します。| | 名前は文字列でなければなりません。オプションの doc 引数には任意の型を指定できます。| |
| | ここで定義されているメソッド: |
| | delattr (...) | バツ。delattr ('名前') <==> del x.name |
| | getattribute (...) | バツ。getattribute ('名前') <==> x.name |
| | 初期化(...) | バツ。init (...) x を初期化します。署名については help(type(x)) を参照してください |
| | 報告(...) | バツ。repr () <==> repr(x) ...

あなたが最も混乱しているロード方法は、基本的に、ファイルをモジュール m に追加し、それらのモジュールのコードをコンパイルすることです。

このコードを使用して何を達成しようとしているのかはわかりませんが、モジュールを動的にロードするはるかに簡単な方法があります。例えば:

Python モジュールの動的ロード

于 2013-04-03T13:40:45.897 に答える