如何为之前创建的类添加新函数?

时间:2012-03-11 23:55:14

标签: python class function

就像标题所说的那样。 例如: 我有一个这样的课:

class NewClass():
    def func1():
        .....

然后我想在程序文件运行时向该类添加一个新函数。 就像将一个新值重新分配给该类的属性一样。 e.g。

NewClass.a = 3

2 个答案:

答案 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'