2016-06-26 17 views
0

クラスを動的にインポートし、そのクラスで関数を実行しようとすると、いくつか問題が発生します。これは特に私の問題です。動的インポート - Python - 呼び出し関数が機能しない

dynamic_importsという名前のディレクタには、pythonスクリプトdyn_imports.pyがあります。このフォルダ内にはscriptsというサブディレクトリがあります。このスクリプトディレクトリには、__init__.pyと、AbhayScript.pyというPythonクラスがあります。クラスAbhayScriptでは、と呼ばれる機能がありますsay_hello()

私の目標はされて

dyn_imports.pyから、私はこれまでのところ

AbhayScriptに機能say_hello()scripts.AbhayScriptをインポートし、呼び出すことができるようにしたいと思い、私は様々な試みました__import__,importlib.import_modulepydoc.locateなどのオプションがあります。これらのオプションはすべてmodule AbhayScriptにアクセスできますが、getattrs()を試してみたり、オブジェクトを呼び出そうとすると、その呼び出しができない、または属性がないというエラーが表示されます。

dyn_imports.py - 私の実験の一つ

myclass = 'scripts.AbhayScript' 

import importlib 
mymod = importlib.import_module(myclass) 
mod,newclass = myclass.rsplit('.',1) 
ncls = getattr(mod,newclass) #throws an AttributeError that 'str' object has no attribute 

AbhayScript.pyコード

class AbhayScript(object): 

    def say_hello(self): 
     print 'Hello Abhay Bhargav' 

Directory Structure of Project

を次のようにディレクトリ構造があります

スクリプトフォルダ内の.pyは空です。

私は、Stackoverflowのほぼすべてのソリューションを試しましたが、私は少しこれに惑わされています。私は間違って何をしていますか?

答えて

1

私は間違っていることを理解しています。モジュールをインポートしていて、getattr関数のクラスを参照していませんでした。ここでは、コードがdyn_imports.pyに

myclass = 'scripts.AbhayScript' 

mod = __import__(myclass, fromlist = ['AbhayScript']) #class explicit 
klass = getattr(mod, 'AbhayScript') #explicit class 
klass().say_hello() #calls the function as desired 
だ私は __import__機能でかつ getattr機能にクラス宣言が明示的に、私はその後、クラスで

を機能へのアクセスを得ることができました

関連する問題