python 怎么修改内置类?

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

https://gist.github.com/ruoyu0088/d385f3ca04583c481538751f50adc364
Cbdy
2016-10-11 20:30:14 +08:00
Python 不是开源的吗?
zjuhwc
2016-10-12 13:42:38 +08:00
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
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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/311999

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX