Python:
为对象动态添加函数
,
且函数定义
来自一个
str
在
Python
中
,
通常情况下
,
你只能为对象添加一个已经写好的方法
需求
:
传入一个
str
类型的变量
,
其值是一个完整的合法的
Python
函数定义
,
然后为一个对象添
加这个函数
:
method_str
=
u
'''
def say(self, name)
print '
My
name
is
', name
'''
class
MyClass
:
def
__init__
(
self
):
pass
def
extends
(
self
,
method_name
,
method_str
):
#
完成这个方法
...
obj
=
MyClass
();
obj
.
extends
(
'say'
,
method_str
)
obj
.
say
(
'wendal'
)#
打印出
My name is wendal
想了不少路子
,
在
Python
的
群里面也得到不少灵感
,
最后顺利实现
:
def
extends
(
sefl
,
method_name
,
method_str
):
#_method = None
exec
method_str
+
'''\n_method = %s'''
%
method_name
self
.
__dict__
[
method_name
]=
new
.
instancemethod
(
_method
,
self
,
None
)
简单解释一下
: method_str
在
exec
前
,
改变为
:
method_str
=
u
'''
def say(self, name)
print '
My
name
is
', name
_method = abc
然后
, exec
执行后
,_method
变量就赋值为
say
函数接下来
,
就是
Python
的自省机制了
,
通过
new
模块
,
生成特定对象
(
本例中是
self)
的实例方法最后
,
为特定对象添加
say
这个函数