繁体   English   中英

将成员 function 动态添加到 Python 中的 class 的实例

[英]Dynamically add member function to an instance of a class in Python

当我执行以下操作时:

class C:
 pass

def f( self ):
 print self

a = C()

a.f = f

a.f()

我在 af() 行收到以下错误:TypeError: f() 恰好采用 1 个参数(给定 0)

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

谢谢

对于 Python 2.X,您可以使用:

import types
class C:
    pass

def f(self):
    print self

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

对于 Python 3.X:

import types
class C(object):
    pass

def f(self):
    print(self)

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

您应该将f放在 class 中,而不是在实例中...

 class C:
     pass

 def f(self):
    print(self)

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

For the interpreter myObject.foo() is the same as myClass.foo(myObject) when the object doesn't hold anything named foo , but a function placed inside a object is just a function.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM