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 に答える