質問

には、どうするのがベストな行程を呼び出す機能の指定された文字列の関数名は、Pythonプログラム。例えば、ということかしてそのモジュール foo, い文字列で、その内容は "bar".には、どうするのがベストなコ foo.bar()?

んが、返却値の型に"byte[]"を指定することが可能となんだけではなく利用 eval.きっかけになるかもしれないとかを使用することにより eval を定義の設定温度を返す関数の結果を関数呼び出しがほしいと思っているこれまでにない関係ではないかと思います。

役に立ちましたか?

解決

仮にモジュール foo と方法 bar:

import foo
method_to_call = getattr(foo, 'bar')
result = method_to_call()

どうも、2、3また、圧縮される:

result = getattr(foo, 'bar')()

そのよご利用の場合.利用できる getattr このバージョンアップしながら、クラスのインスタンス結合方法、モジュールレベルの方法、クラスメソッド...一覧いただければと思います。

他のヒント

locals()["myfunction"]()

または

globals()["myfunction"]()

地元の人々 辞書を返しま現地元のシンボル。 グローバル変数 辞書を返すとグローバルシンボル。

パトリック-ソリューションは、ブラン.が必要な場合は動的にモジュールとして、こちらをクリックして下さいインポートすることができない

module = __import__('foo')
func = getattr(module, 'bar')
func()

だけのシンプルな貢献。場合にクラスをインスタンスが同じファイルを利用するとともに、このようなもの:

# Get class from globals and create an instance
m = globals()['our_class']()

# Get the function (from the instance) that we need to call
func = getattr(m, 'function_name')

# Call it
func()

例えば:

class A:
    def __init__(self):
        pass

    def sampleFunc(self, arg):
        print('you called sampleFunc({})'.format(arg))

m = globals()['A']()
func = getattr(m, 'sampleFunc')
func('sample arg')

# Sample, all on one line
getattr(globals()['A'](), 'sampleFunc')('sample arg')

ない場合にはクラス:

def sampleFunc(arg):
    print('you called sampleFunc({})'.format(arg))

globals()['sampleFunc']('sample arg')

指定された文字列は、完全にpythonパス機能を利用中にこのようにのんびりとしたつの結果と機能:

import importlib
function_string = 'mypackage.mymodule.myfunc'
mod_name, func_name = function_string.rsplit('.',1)
mod = importlib.import_module(mod_name)
func = getattr(mod, func_name)
result = func()

最良の答えによ PythonプロFAQ することはできない。

functions = {'myfoo': foo.bar}

mystring = 'myfoo'
if mystring in functions:
    functions[mystring]()

第一の技術を開発する文字列の必要のない合わせ名の機能を確定します。このものが主に使われている技術をエミュレートする場合の構築

その答えんないたい

<エバール>のように行動

getattr(locals().get("foo") or globals().get("foo"), "bar")()

なぜならない自動車-輸入

getattr(
    locals().get("foo") or 
    globals().get("foo") or
    __import__("foo"), 
"bar")()

して辞書をチェックしたい

getattr(next((x for x in (f("foo") for f in 
                          [locals().get, globals().get, 
                           self.__dict__.get, __import__]) 
              if x)),
"bar")()

る必要がありまへのより深い

getattr(next((x for x in (f("foo") for f in 
              ([locals().get, globals().get, self.__dict__.get] +
               [d.get for d in (list(dd.values()) for dd in 
                                [locals(),globals(),self.__dict__]
                                if isinstance(dd,dict))
                if isinstance(d,dict)] + 
               [__import__])) 
        if x)),
"bar")()

そのような場合に必要なパスの機能またはクラス名、アプリ名称を文字列として、なにができること:

myFnName  = "MyFn"
myAppName = "MyApp"
app = sys.modules[myAppName]
fn  = getattr(app,myFnName)

います。この大きさを取っていて、<エバール>を使用する 召喚機能から、現在のコンテキスト.その後、実際の機能を利用することが出来ます。

の利益のために私からはまず<エバール>関連のエラーが発生した場合に口寄せします。を取得します のみ 機能の関連のエラーが発生した場合にご利用いただきます.

def say_hello(name):
    print 'Hello {}!'.format(name)

# get the function by name
method_name = 'say_hello'
method = eval(method_name)

# call it like a regular function later
args = ['friend']
kwargs = {}
method(*args, **kwargs)

などが示唆されたいます。かったことを発見しますが。

<object>.__getattribute__(<string name>)(<params>)

を使用していpython2.66

武器agiは、dexで下がらないboxerぐ

この質問 どのように動的に通話方法内のクラスを使用方法-名前の割り当てを変数"複製] 印として重複したことが、私の投稿関連する回答はこちら

シナリオでは、クラスにいたく別の方法と同じクラスは、動的に、追加の詳細に独自の例るには、一部の幅広いシナリオと透明感のある:

class MyClass:
    def __init__(self, i):
        self.i = i

    def get(self):
        func = getattr(MyClass, 'function{}'.format(self.i))
        func(self, 12)   # This one will work
        # self.func(12)    # But this does NOT work.


    def function1(self, p1):
        print('function1: {}'.format(p1))
        # do other stuff

    def function2(self, p1):
        print('function2: {}'.format(p1))
        # do other stuff


if __name__ == "__main__":
    class1 = MyClass(1)
    class1.get()
    class2 = MyClass(2)
    class2.get()

出力(Pythonは3.7本となっている。-x)

function1:12

function2:12

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top