0

ループ内で次を使用して、実行時にモジュールに属性を追加しています。

this_module = sys.modules[__name__]
setattr(this_module, attr_name, attr_value)

print dir(this_module)モジュールから呼び出すと、属性が表示されます。すごい!

モジュールをインポートしてデコレーターで属性を使用しようとすると、AttributeError例外がスローされ続けます。デバッグするためdir()に、インポートしたモジュールを呼び出しましたが、オンザフライで追加された属性はどれもリストされていません!

に属性名を追加しまし__all__たがimport *、まだ何もありません!

どんなアイデアでも素晴らしいでしょう。また、不足している可能性のある用語を教えてください。Google で検索しても答えが見つかりませんでした。

--

Kevin の提案に従って、Flask アプリケーションに辞書を追加し (テストを簡単にするために、彼のトップレベルの提案の代わりに)、それらの属性を追加しました。

app.security = dict()

ループの中:

app.security[attr_name] = attr_value

デコレーターが使用されるモジュール (「time_entry」は属性名であり、クラス インスタンスを保持します):

@app.security['time_entry'].need()

サーバーを起動しようとすると、次のエラーが発生します。

    @security["time_write"].require()
             ^
    SyntaxError: invalid syntax
4

1 に答える 1

0

特定の問題の回避策を作成しました。これは解決策ではありません。このプロジェクトが終了したら、さらに調査する予定です。

ダミー クラスを作成し、Flask アプリケーションでそのインスタンスを使用して属性を設定しました。

class Security: pass
app.security = Security()

次に、属性を Security クラスに直接設定します。

setattr(app.security, attr_name, attr_value)

繰り返しますが、実行時に作成していたモジュール レベルの属性がインポートされなかった理由は解決されません。その質問に対する答えが得られたら、戻ってこれを編集します。

于 2015-02-28T16:49:48.950 に答える