修改方法只有方法的名称和实例对象

时间:2013-01-29 18:41:57

标签: python class methods instance

我知道getattr()您可以调用该方法,但我需要覆盖它,因此myInstance.mymethod将被覆盖。

我将方法的名称作为字符串和实例的引用。

1 个答案:

答案 0 :(得分: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'

lambda的东西只是用于定义函数的简洁速记:

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

setattr(a,'method',types.MethodType(func,a))