0

getattr()メソッドを呼び出すことができることはわかっていますが、上書きする必要があるため、上書きされmyInstance.mymethodます。

文字列としてのメソッドの名前とインスタンスの参照があります。

4

1 に答える 1

1

で上書きできますsetattr

>>> class Foo(object):
...    def method(self): pass
... 
>>> a = Foo()
>>> a.method()
>>> setattr(a,'method',1)
>>> a.method()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

別の方法に置き換えるには:

>>> import types
>>> setattr(a,'method',types.MethodType(lambda self: self.__class__.__name__,a))
>>> a.method()
'Foo'

ラムダのものは、関数を定義するための空想的な省略形です。

def func(self):
    return self.__class__.__name__

setattr(a,'method',types.MethodType(func,a))
于 2013-01-29T18:43:19.500 に答える