推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
shyrock
V2EX  ›  Python

如何不修改原始文件而改变库代码的行为?

  •  
  •   shyrock · Sep 29, 2021 · 2395 views
    This topic created in 1837 days ago, the information mentioned may be changed or developed.
    比如我用的框架库里有个 expression 类,我发现这个类有个 bug,如果我直接修改这个类可以修复 bug 。
    但是因为这个类并不在我的源代码管理中,而是定期从厂商那里获取新版本更新的,
    所以我希望在我的代码里面加入一个补丁来修改框架库中 expression 类的行为。

    有一些情况我认为可以使用猴子补丁,那就是 expression 类生成了全局对象,通过在运行期修改这个对象就可以修改系统的行为。
    可是如果其他代码都是局部调用 expression 类生成临时对象的话,猴子补丁就没效果了。

    求各位彦祖指点。
    deplivesb
        1
    deplivesb  
       Sep 29, 2021
    直接在 globals 替换掉 expression ? 我不知道这样可行不
    shyrock
        2
    shyrock  
    OP
       Sep 29, 2021
    @zhangdeplives #1 能否具体一点?
    wenqiang1208
        3
    wenqiang1208  
       Sep 29, 2021   ❤️ 1
    猴子补丁,在项目启动时,执行一下, 项目中所有引用的地方 就可以生效
    shyrock
        4
    shyrock  
    OP
       Sep 29, 2021
    @wenqiang1208 #3 对的。我之前对猴子补丁的理解狭隘了。
    猴子补丁既可以应用于对象,也可以应用于类。
    在应用于类的情况下,是可以全局起效的,并且对模块加载顺序无要求。

    结帖。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1154 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 18:08 · PVG 02:08 · LAX 11:08 · JFK 14:08
    ♥ Do have faith in what you're doing.