在Python中延迟绑定方法调用

时间:2015-06-02 10:11:23

标签: python

假设我有一个名为method_one的类,它有一个名为method_one的方法。比如说,我正在将具有方法method名称的dict转换为值AttributeError: 'A' object has no attribute 'method' 作为键,并因某种原因将其转换为JSON(Amazon SQS)。

现在当我将JSON字符串转换回dict(从Amazon SQS读取)时,在使用dict语法提取方法名称然后调用类对象上的方法返回错误。

import json


class A:
    def method_one(self):
        return "method_one"


j_json = json.dumps({
    'method': A.method_one.__name__
})

j_dict = json.loads(j_json)

a = A()
method = j_dict['method']
a.method()

如何在类的对象上调用方法?

{{1}}

1 个答案:

答案 0 :(得分:3)

method变量具有要调用的实际方法的名称,而不是实际的方法本身。您需要使用method变量获取与getattr变量中的名称对应的方法,并像这样调用它

>>> import json
>>> class A:
...     def method_one(self):
...         return "method_one"
... 
>>> j_json = json.dumps({
...     'method': A.method_one.__name__
... })
>>> j_dict = json.loads(j_json)
>>> a = A()
>>> method = j_dict['method']
>>> getattr(a, method)()
'method_one'