6

我可以通过组合字符串调用方法来处理数据吗?

例如,可以输入data.image.truecolor()代码吗?

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

我的问题是:如果我有一个名为 data 的数据对象(不是字符串),如何结合".image.truecolor"sting 来调用方法来处理数据?

它像是:

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

当然,它失败了。我有一个AttributeError.

因为处理数据的方法有很多,例如:

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

手动输入代码既愚蠢又丑陋,不是吗?

因此,我希望我可以使用这段代码:

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

有可能通过这种方式吗?

4

4 回答 4

10
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

当您知道您将调用 的方法时,为什么不这样data.image呢?否则,如果您不知道第二个属性 ,image您将不得不使用getattr其他答案中建议的两个级别。

于 2013-08-22T07:46:38.070 回答
5

您需要两个级别getattr

im = getattr(data, 'image')
result=getattr(im, method)
result()
于 2013-08-22T07:46:01.370 回答
4

您可以getattr用于按名称获取类实例方法,这是一个示例:

class A():
    def print_test(self):
        print "test"

a = A()
getattr(a, 'print_test')()  # prints 'test'

而且,在您的情况下,将有两个getattrs,一个用于 image ,一个用于 image 方法:

methods=["fog","ir108","dnb","overview"]
image = getattr(data, 'image')
for method in methods:
    result = getattr(image, method)
    result()
于 2013-08-22T07:46:05.743 回答
0

您也可以使用eval("data.image.fog()")它来调用/评估字符串中的表达式。

于 2013-08-22T08:24:54.860 回答