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
vtoexsir
V2EX  ›  Python

python 怎么修改内置类?

  •  
  •   vtoexsir · 2016-10-11 18:51:50 +08:00 · 2350 次点击
    这是一个创建于 2967 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如内置类 str,有个方法 strip().
    我想修改 strip()这个方法的参数和实现.
    那我该怎么做呢?
    如果不可以修改,那是否可以给内置类添加一个自定义的方法呢?
    如果可以,最好请给个简单的示例.
    多谢您的回复!
    6 条回复    2016-10-19 18:07:53 +08:00
    longchisihai
        1
    longchisihai  
       2016-10-11 19:07:24 +08:00
    建议不要这么做,你可以继承 str 类 然后添加自己的方法
    修改内置的方法 不仅有风险 而且也是在给别人挖坑
    WinterWu
        2
    WinterWu  
       2016-10-11 19:17:36 +08:00 via iPhone
    你当然可以 hack ,但是非常非常不建议这样做。太危险,以后维护就是巨坑。所以描述下你的需求? 99.9%你完全不需要这样做。
    ruoyu0088
        3
    ruoyu0088  
       2016-10-11 20:19:02 +08:00   ❤️ 1
    可以直接往类的字典里面添加方法,由于内置类的字典被保护起来了,因此这里使用 gc 模块获得实际的字典。

    https://gist.github.com/ruoyu0088/d385f3ca04583c481538751f50adc364
    Cbdy
        4
    Cbdy  
       2016-10-11 20:30:14 +08:00 via Android
    Python 不是开源的吗?
    zjuhwc
        5
    zjuhwc  
       2016-10-12 13:42:38 +08:00   ❤️ 1
    http://stackoverflow.com/questions/192649/can-you-monkey-patch-methods-on-core-types-in-python
    如果你用 string 模块,可以直接用赋值的方法改。但是 build-in 的类是不能改的,可以自己实现一个子类。
    https://gist.github.com/befe026ebe699286964967e8915ac95d.git
    GeekGao
        6
    GeekGao  
       2016-10-19 18:07:53 +08:00
    非 Hack ,可参考楼上的方法。
    CPython 2.x Hack :
    修改 split 方法: https://github.com/geekgao/python/blob/master/Objects/stringobject.c#L1529 ( ps:注意自行搞定引用计数)
    注册自定义方法入口参照其他方法: https://github.com/geekgao/python/blob/master/Objects/stringobject.c#L3883
    参考文档: https://docs.python.org/2/c-api/intro.html#objects-types-and-reference-counts
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5318 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:45 · PVG 11:45 · LAX 19:45 · JFK 22:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.