就像标题所说的那样。 例如: 我有一个这样的课:
class NewClass():
def func1():
.....
然后我想在程序文件运行时向该类添加一个新函数。 就像将一个新值重新分配给该类的属性一样。 e.g。
NewClass.a = 3
答案 0 :(得分:4)
如果要向类类型本身添加一个函数,可以只分配它,确保包含传递的自引用的参数:
>>> class Quz(object):
... def __init__(self):
... self.a = "A"
...
>>> def qux(self):
... print self.a
...
>>> Quz.qux = qux
>>> q = Quz()
>>> q.qux()
A
如果您只想将该函数添加到该类的单个实例,则可以使用types.MethodType()
创建绑定实例方法:
>>> import types
>>> class Foo(object):
... def __init__(self):
... self.a = "A"
...
>>> def bar(self):
... print self.a
...
>>> f = Foo()
>>> f.bar = types.MethodType(bar, f, Foo)
>>> f.bar()
A
答案 1 :(得分:0)
与添加非函数类型的属性的过程相同:
对于整体课程:
>>> class Foo(object):
... pass
>>> Foo.baz = lambda self: "Foobaz"
>>> f = Foo()
>>> f.baz()
'Foobaz'
修改强>:
这是不要做的事情,除非你光荣地懒惰,并且知道并且不关心Amber在下面的评论中指出的后果。
对于一个例子:
>>> bar = Foo()
>>> bar.biz = lambda: "barbiz"
>>> bar.biz()
'barbiz'