假设我有一个类FooClass,它定义了一个方法foo_method。这个类在第三方库中,我想明确地覆盖它。我有许多继承自FooClass的类,所以我不想为每个子类重写foo_method。相反,我想在不深入研究第三方库代码的情况下覆盖类的方法定义。当我以明显的方式尝试时,
from thirdparty import FooClass
class FooClass(object):
def foo_method():
newstuff
我得到了奇怪的行为 - NotImplementedErrors等。我错过了什么吗?
答案 0 :(得分:5)
您正在本地重新定义课程;这不会改变原来的类别或影响在别处使用它的任何人。
你可以对该类的方法进行monkeypatch:
from thirdparty import FooClass
orig_foo_method = FooClass.foo_method
def new_foo_method(self):
# do new stuff
# perhaps even call orig_foo_method(self)
FooClass.foo_method = new_foo_method
现在,任何试图在Python解释器中的.foo_method()
个实例上调用FooClass
的代码都会找到并调用您的new_foo_method()
方法。
答案 1 :(得分:4)
首先想到的是使用简单的继承ala
from thirdparty import FooClass
class MyUpdatedClass(FooClass):
def foo_method():
newstuff