假设我有一个名为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/