当我执行以下操作时:
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以这种方式解释原始示例?换句话说,有没有办法在运行时将成员函数添加到类的实例?
由于
答案 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
相同,但放置在对象内的函数只是一个函数。