V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
chenshaored
V2EX  ›  Python

请教个问题, Python 如何禁用函数

  •  
  •   chenshaored · 78 天前 · 3394 次点击
    这是一个创建于 78 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Python 中如何禁用( disable )某些函数?
    由于项目背景的原因,前辈写的某些函数,让后来的开发者禁用、慎用,如何通过门禁检查,能拦截住
    各位大佬,有什么好的办法吗 ?
    先行谢过了。
    22 条回复    2021-11-02 11:10:22 +08:00
    ClericPy
        1
    ClericPy  
       78 天前
    完全没看懂具体需求是什么... 可以再生动一点么

    到底是前辈用函数禁止后来者用某些东西, 还是前辈写的垃圾, 让后来者不要用这些东西...
    chaleaoch
        2
    chaleaoch  
       78 天前
    装饰器呗。。。。
    thetbw
        3
    thetbw  
       78 天前
    类似与 java 的 @Deprecated 呗,编译还有 ide 界面上都会有警告,python 不晓得
    imycc
        4
    imycc  
       78 天前   ❤️ 2
    老哥你是国人吗,怎么这段话看着那么像。。翻译过来的

    我自己没这么用过,但是我见过第三方库的常见做法是,先用 DeprecationWarning 提示用户,告知他们做好迁移准备(比如改用另一个函数),并在某个版本之后移除掉这些函数 /方法
    lixiang2017
        5
    lixiang2017  
       78 天前 via Android   ❤️ 3
    删掉
    jjshare123
        6
    jjshare123  
       78 天前   ❤️ 1
    还是 PHP 牛啊,配置里面直接 disabled_class 、disabled_functions
    leishi1313
        7
    leishi1313  
       78 天前 via Android
    自己写个 checker ,然后不管是组里每个人自己装上,还是提 pr 的时候跑一下都可以
    https://pylint.pycqa.org/en/latest/how_tos/custom_checkers.html
    wellsc
        8
    wellsc  
       78 天前 via iPhone
    @imycc 看不出来有什么问题
    wd
        9
    wd  
       78 天前 via iPhone
    如果是禁用,那可能可以直接删掉?..
    如果是提示,那可能通过 commit hooks 之类做吧
    dangyuluo
        10
    dangyuluo  
       78 天前
    clone python 源码,删掉相关的函数,然后重新编译
    oOoOoOoOoOo
        11
    oOoOoOoOoOo  
       78 天前 via Android
    # 注释掉
    Liyiw
        12
    Liyiw  
       78 天前
    用装饰器标注弃用的函数
    janxin
        13
    janxin  
       78 天前   ❤️ 1
    这个答案看需求吧,首先第一个不用用的函数咋还不删除就是一个问题...

    建议的实践是使用 https://docs.python.org/3/library/warnings.html#warnings.warn 提示会在指定版本删除。Python 启动需要添加参数"-Wall"。当然,这个是有 exception 支持的,可以直接 raise 异常出来。

    然后升级到指定版本后根据约定删除即可。
    rpman
        14
    rpman  
       78 天前
    做个装饰器, 调用的时候输出一条 Deprecation Warning
    phithon
        15
    phithon  
       77 天前
    如果真想禁用直接删了就行了。但既然问出这个问题说明并不能删掉,所以还是给个警告吧。

    https://docs.python.org/3/library/warnings.html
    Rache1
        16
    Rache1  
       77 天前
    @jjshare123 这个对于有些也不太好用,一些语法结构类的,看起来是个函数,实际上不是 比如 eval 、isset
    nobodynight
        17
    nobodynight  
       77 天前
    如果是需要拦截调用者对一个或多个特定函数的调用,则或许可以考虑简单 Hook 目标函数。


    此示例仅适用于模块函数,不适用于类方法,后者需要进行额外处理。值得一提的是,Hook 处理函数可以选择接受任意位置参数和关键字参数,这意味着允许一个或多个目标函数公用一个 Hook 处理函数 (门禁),示例代码中没有这样做。

    如果可能,建议考虑使用装饰器特性。
    RandomAccess
        18
    RandomAccess  
       77 天前 via iPhone
    装饰器 调用前 raise error
    leimao
        20
    leimao  
       77 天前 via iPhone
    Baze Build
    zachlhb
        21
    zachlhb  
       77 天前 via iPhone
    用猴子补丁把函数的功能改掉
    dicc
        22
    dicc  
       76 天前
    就算用猴子补丁,应该可以 import 然后再 reload 绕过,感觉得自己重新编译
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3156 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:59 · PVG 12:59 · LAX 20:59 · JFK 23:59
    ♥ Do have faith in what you're doing.