说我有以下class
class Test:
def TestFunc(self):
print 'this is Test::TestFunc method'
现在,我创建了class Test
>>>
>>> t = Test()
>>>
>>> t
<__main__.Test instance at 0xb771b28c>
>>>
现在,t.TestFunc
表示如下
>>>
>>> t.TestFunc
<bound method Test.TestFunc of <__main__.Test instance at 0xb771b28c>>
>>>
现在我将Python
t.TestFunc
的{{1}}表示形式存储到字符串string_func
>>>
>>> string_func = str(t.TestFunc)
>>> string_func
'<bound method Test.TestFunc of <__main__.Test instance at 0xb771b28c>>'
>>>
现在,有没有办法,我可以从字符串<bound method Test.TestFunc of <__main__.Test instance at 0xb771b28c>>
获取函数句柄。例如,
>>>
>>> func = xxx(string_func)
>>> func
<bound method Test.TestFunc of <__main__.Test instance at 0xb771b28c>>
>>>
答案 0 :(得分:4)
你不能单独使用字符串返回同一个对象,因为Python没有为你提供一个按内存地址查找对象的方法。
你可以返回 __main__.Test
的另一个实例,只要它的构造函数不接受任何参数,并再次查找该方法,但它将没有相同的内存地址。
您必须为其组件(模块,类名和方法名称)解析字符串,然后在各种组件上使用getattr()
,将该类实例化为该过程的一部分。我怀疑这是你想要的。
答案 1 :(得分:1)
需要考虑几个陷阱:
Test
的实例可能已存在或可能不存在Test.TestFunc
0xb771b28c
答案 2 :(得分:0)
您可以使用getattr。
In [1]:
class Test:
def TestFunc(self):
print 'this is Test::TestFunc method'
In [2]: t = Test()
In [3]: getattr(t, 'TestFunc')
Out[3]: <bound method Test.TestFunc of <__main__.Test instance at 0xb624d68c>>
In [4]: getattr(t, 'TestFunc')()
this is Test::TestFunc method