仅为一个应用程序修改标准类

时间:2018-10-07 10:15:15

标签: python python-3.x

Python中是否可以通过以下方式修改标准类:1)修改后的类仅在一个特定的应用程序中可见,2)在该应用程序内创建的所有实例都使用修改后的类,以及3)当我升级Python,我的修改不会丢失吗?

标准方法将涉及创建相关类的子级。这将满足要求#1和#3,但不能满足要求#2,并且这对我没有任何帮助(不幸的是,我不控制类实例的创建,我将不得不重写很多其他人的代码)

我想我可以在Python / lib / ...中修改实际的类源,但这只能满足要求#2,不能满足要求#1和#3。而且,这对我来说仅是有效的-如果我想将最终的应用程序提供给其他人,他们也将不得不修改他们的库代码,这确实是不可能的。

不幸的是,我对Python不够熟悉,无法了解其他解决方案。我知道在Delphi中,我可以使用方法挂钩(可能与类帮助程序结合使用),或者简单地将涉及的库文件复制到应用程序的目录中并在其中进行修改-该文件将优先于系统库。我可以在Python中做这样的事情,最好在版本2和版本3中做这件事吗?

(特别是,我需要修改标准的HTTPConnection和Urllib的HTTPConnectionPool。)

1 个答案:

答案 0 :(得分:0)

显然,我必须回答自己的问题。该解决方案实际上在Python中非常简单:

____ httphook.py ____

import http.client

def replacement_getresponse(self):
    print("Reading response from my code")
    return self.original_getresponse()

def install_hook():
    http.client.HTTPConnection.original_getresponse = http.client.HTTPConnection.getresponse
    http.client.HTTPConnection.getresponse = replacement_getresponse

____ test.py ____

import http.client
import httphook
httphook.install_hook()
# Now my replacement function gets called