说的有点抽象,下面用 selenium 模块举个例子。
在remote/webdriver.py
文件中有下面一个类,为标题说的关键类。
class WebDriver(object):
pass
在chrome/webdriver.py
文件中,依赖上述关键类,称这个文件为依赖关键类的文件
,其内容如下。
#...
from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver
#...
class WebDriver(RemoteWebDriver):
pass
现在,我想重写关键类。并且,依赖关键类的文件
的文件会自动调用我重写的类,基本要求是不改动模块文件。
不知列位有没有看懂,我尽力表达了... 各位 v 友,有招嘛,不懂得但是对这个问题有兴趣的可以回一下贴,顶一下,让大佬看到😁,感谢感谢~
1
pursuer 2021-07-13 19:05:53 +08:00
修改 sys.path 或者 sys.meta_path,让 import 优先加载你自己写的 py 文件
|
2
renmu123 2021-07-13 19:21:03 +08:00 via Android 1
猴子补丁?
|
3
wuwukai007 2021-07-13 19:29:51 +08:00
chrom/__init__.py
class MyWebDriver: pass from selenium.webdriver.remote import webdriver webdriver.WebDriver = MyWebDriver |
4
muzuiget 2021-07-13 21:59:53 +08:00
就是 monkey patch 大法,很正常的操作。
|
5
lanlanye 2021-07-14 10:10:30 +08:00
如果依赖关键类的文件都是你自己写的,改个名字就可以了,否则就按楼上的来
|
6
crclz 2021-07-14 11:51:45 +08:00
在自己的工程中,叫依赖注入。注意子类要能够里氏替换。
|