Wie rufe ich Methode nach String in Python auf?

Kann ich eine Methode aufrufen, um Daten zu verarbeiten, indem sie Strings kombiniert?

Zum Beispiel ist es ok, "data.image.truecolor ()" in Code eingeben,

data.image.truecolor() # This line is successful to call method 

Mein Problem ist: Wenn ich ein Datenobjekt namens data (nicht einen String) habe, wie man ".image.truecolor" Sting kombiniert, um Methode zu verarbeiten, um die Daten zu verarbeiten?

Es ist wie:

 result=getattr(data,".image.truecolor") result() # which is equivalent to the code above 

Natürlich ist es gescheitert. Ich habe einen AttributeError.

Denn es gibt viele Methoden, um Daten zu verarbeiten, zum Beispiel:

 data.image.fog() data.image.ir108() data.image.dnb() data.image.overview() # .... and other many methods 

Es ist dumm und hässlich, den Code von Hand zu schreiben, nicht wahr?

Aus diesem Grund hoffe ich, dass ich diesen Code benutzen kann:

 methods=["fog","ir108","dnb","overview"] for method in methods: method=".image"+method result=getattr(data,method) # to call method to process the data result() # to get the data processed 

Ist es möglich, auf diese Weise zu tun?

Danke für jede Hilfe.

4 Solutions collect form web for “Wie rufe ich Methode nach String in Python auf?”

 methods=["fog","ir108","dnb","overview"] dataImage = data.image for method in methods: result = getattr(dataImage ,method) # to call method to process the data result() # to get the data processed 

Warum nicht so, wenn Sie wissen, dass Sie Methoden von data.image ? Ansonsten, wenn Sie nicht wissen, die zweite Eigenschaft, image , hätten Sie haben, um zwei Ebenen von getattr wie in den anderen Antworten vorgeschlagen.

Du brauchst ein zweistufiges getattr :

 im = getattr(data, 'image') result=getattr(im, method) result() 

Sie können getattr für immer Klasse Instanz Methoden mit Namen, hier ist ein Beispiel:

 class A(): def print_test(self): print "test" a = A() getattr(a, 'print_test')() # prints 'test' 

Und in deinem Fall gibt es zwei getattr s, eine für Bild und eine für die getattr :

 methods=["fog","ir108","dnb","overview"] image = getattr(data, 'image') for method in methods: result = getattr(image, method) result() 

Sie könnten auch eval("data.image.fog()") , um einen Ausdruck in einem String aufzurufen / zu bewerten.

Python ist die beste Programmiersprache der Welt.