在Python中动态地将成员函数添加到类的实例

时间:2011-05-25 01:25:39

标签: python

当我执行以下操作时:

class C:
 pass

def f( self ):
 print self

a = C()

a.f = f

a.f()

我在a.f()行收到以下错误: TypeError:f()只取1个参数(给定0)

问题似乎是当f被添加到实例a时,它被视为存储在a而不是实际成员函数内的函数。如果我将a.f()更改为a.f(a),那么我得到了预期的效果,但有没有办法让python以这种方式解释原始示例?换句话说,有没有办法在运行时将成员函数添加到类的实例?

由于

2 个答案:

答案 0 :(得分:19)

import types
class C:
    pass

def f(self):
    print self

a = C()
a.f = types.MethodType(f,a)
a.f()

答案 1 :(得分:3)

你应该把f放在课堂上,而不是放在实例中......

 class C:
     pass

 def f(self):
    print(self)

 a = C()
 C.f = f
 a.f()

当对象不包含任何名为myObject.foo()的内容时,解释器myClass.foo(myObject)foo相同,但放置在对象内的函数只是一个函数。