如何在不触及python中的源代码的情况下修改类方法?

时间:2013-08-22 10:01:05

标签: python methods patch

如何在不触及源代码的情况下修改类方法?

库中有一个类,我不想更改它的源代码。

class SomeLibraryClass(object):
  def foo(self, a_var):
     print self, a_var, "hello world"

现在,我想定义自己的foo方法,并替换原来的SomeLibraryClass.foo

def foo(obj, a_var):
   print obj, a_var, "good bye"

SomeLibraryClass.foo = foo //

我应该如何处理 self 变量?
我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

如果您使用某种方法,则与self相同。 self将作为第一个参数传递给您的函数,并将作为对当前对象的引用。因此,如果要定义一个将用作方法替换的函数,只需将self添加为第一个参数。

class SomeLibraryClass(object):
  def __init__(self, x):
      self.x = x

  def foo(self, y):
     print('Hello', self.x, y)

def my_foo(self, y):
    print ('Good buy', self.x, y)

SomeLibraryClass.foo = my_foo

以及如何使用它:

>>> s = SomeLibraryClass(33)
>>> s.foo(5)
Good buy 33 5