2

我写了一个python文件,如:

class A(object):
    def update(self, str):
        pass

    def say(self, str):
        print "I update: " + str

def fun(obj, str):
    obj.say(str)

a = A()
import types
setattr(A, "update", types.MethodType(fun, None, A))
a.update("hello")

b = A()
b.update("world?")

它改变了类的行为,对象 b 已经改变。但是,我只想更改对象 a。如何在python中更改对象的方法?

4

2 回答 2

0

这是一种方法:

 a.update = lambda x: fun(a, x)
于 2012-08-25T04:53:25.643 回答
0

您正在设置类方法,而您只想设置绑定到某个实例的方法。

>>> class MyClass(object):
...     def a(self): pass
... 
>>> MyClass.a = lambda x: x
>>> MyClass.a
<unbound method MyClass.<lambda>>
>>> a = MyClass()
>>> a.a
<bound method MyClass.<lambda> of <__main__.MyClass object at 0x1d7fed0>>

a在类级别更改方法也会更改所有实例的方法a

>>> class MyClass(object):
...     def a(self): pass
... 
>>> b = MyClass()
>>> b.a = lambda x: x
>>> MyClass.a
<unbound method MyClass.a>
>>> b.a
<function <lambda> at 0x1d88938>
>>> c = MyClass()
>>> c.a
<bound method MyClass.a of <__main__.MyClass object at 0x1d8d110>>

更改a实例的方法不会更改类或其他实例的方法。

于 2012-08-25T08:18:56.330 回答