-1

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

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

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变量?
我怎样才能做到这一点?

4

1 回答 1

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
于 2013-08-22T10:15:32.923 回答