3

奇妙な問題に出くわしましたが、検索で同様の問題は見つかりませんでした。これはおそらく、問題が明白であり、私がそれを見ていないことを意味します. modulefile.py というクラス モジュールが、modulefolder というフォルダーにあります。ここにmodulefile.pyがあります:

class moduleclass(object):
    def __init__(self):
        self.parameter = 5

今、私の test1.py ファイルでこれを行います:

from modulefolder.modulefile import moduleclass
myobj = moduleclass()
print myobj.parameter

そして、これはうまく機能します-期待どおりに値5を出力します。

さて、私の問題は、私のアプリケーションでは、モジュールフォルダー、モジュールファイル、およびモジュールクラスが実行時までわからないことです。それらは文字列で提供されます。だから私はこれを試しました、これはtest2.pyです:

module = __import__("modulefolder.modulefile", fromlist=["moduleclass"])
myobj = getattr(module, "moduleclass")
print myobj.parameter

そして、これは機能しません。エラーが発生しますAttributeError: type object 'moduleclass' has no attribute 'parameter'

だから、これは私を当惑させているものです。test1.py と test2.py の両方で、印刷ステートメントをprint dir(myobj)代わりに変更したところ、次のようになりました。

test1.py の場合:

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'parameter']

test2.py の場合

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

したがって、明らかに、2 番目のインポート メソッドには「パラメータ」属性がありません。問題は、理由がわからないことです。

この動的インポートの方法が、インスタンス化されたオブジェクトの動作に影響を与えるのはなぜですか? そして、それを修正するにはどうすればよいですか?

私は答えを探して高低を検索したので、おそらく私が見落としているか、完全に理解していない単純なものです.

4

1 に答える 1

4

でクラスをインスタンス化しませんtest2.py:

myobj = getattr(module, "moduleclass")()
于 2013-03-05T22:14:02.503 に答える