假设我有一个名为A的类,并且它有一个名为method_one的方法。说,我正在转换以方法method_one作为值,method作为键的字典,并出于某种原因将其转换为JSON(Amazon SQS)。

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

AttributeError: 'A' object has no attribute 'method'


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

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()

最佳答案

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'

关于python - Python中方法调用的延迟绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30593168/

10-11 22:03
查看更多