如何在不触及源代码的情况下修改类方法?
库中有一个类,我不想更改它的源代码。
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 变量?
我怎么能这样做?
答案 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