首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

monkeypatching stdlib方法在Python中是一个很好的做法吗?

monkeypatching stdlib方法在Python中不是一个推荐的做法。

Monkeypatching是指在运行时修改或扩展已有的代码,包括标准库(stdlib)中的方法。尽管Monkeypatching在某些情况下可能会解决问题,但它也存在一些潜在的问题和风险。

首先,Monkeypatching会破坏代码的可读性和可维护性。当多个开发者共同维护一个项目时,如果其中一个开发者对标准库方法进行Monkeypatching,其他开发者可能会对代码的行为感到困惑,导致代码难以理解和调试。

其次,Monkeypatching可能会引入不稳定性和不可预测的行为。由于标准库方法被修改,其他依赖于这些方法的代码可能会出现意外的错误或异常。这种不稳定性会增加代码的维护成本,并且可能导致难以排查的bug。

另外,Monkeypatching还可能导致与其他库或框架的冲突。如果多个库都对同一个标准库方法进行Monkeypatching,可能会导致方法的行为不一致,进而引发难以追踪的错误。

相反,推荐的做法是通过继承、组合或使用装饰器等技术来扩展或修改标准库方法的行为。这样可以保持代码的可读性和可维护性,并且避免潜在的冲突和不稳定性。

总结起来,Monkeypatching stdlib方法在Python中不是一个很好的做法,应该尽量避免使用。如果需要扩展或修改标准库方法的行为,应该考虑使用其他技术来实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

django admin配置搜索域一个外键时处理方法

,双下划线 list_display = ('book', 'category') # 页面上显示字段,若不设置则显示 models.py __unicode__(self) 中所返回值...Django admin 系统搜索时可能会出现“related Field has invalid lookup: icontains”错误,主要原因外键查询需要指定相应字段。...python2.7,一切操作做完之后,部署到云服务器上后,就在后台管理系统中看到B属性一栏f显示为A_Object,并没有显示A属性——name值。...究其缘由,发现我云服务器上用python3.6,在这里要将__unicode__()方法替换成__str__()方法才行. class A: name=models.CharField(max_length...admin配置搜索域一个外键时处理方法就是小编分享给大家全部内容了,希望能给大家一个参考。

3.8K20

Python人工智能(AI)优势,年薪百万互联网吹泡沫

每天会准时讲一些项目实战案例,分享一些学习方法和需要注意小细节,,这里python学习者聚集地 我相信这些人几乎都将被Python 一网打尽,成为 Python 阵营庞大后备军。...比如说,任何一个人,只要愿意学习,可以几天时间里学会Python基础部分,然后干很多很多事情,这种投入产出比可能其他任何语言都无法相比。...更重要Python 包装能力、可组合性、可嵌入性都很好,可以把各种复杂性包装在 Python 模块里,暴露出漂亮接口。...相比之下,Python 现代编程语言设计和演化当中一个成功典范。 Python 之所以战略定位上如此清晰,战略坚持上如此坚定,归根结底是因为其社区构建了一个堪称典范决策和治理机制。...而 AI 本质一个自学习、自组织系统,其规模和复杂性一个数学模型在数据喂养下自己长出来内生

96950
  • python接口测试:一个用例文件调用另一个用例文件定义方法

    简单说明 进行接口测试时,经常会遇到不同接口间传递参数情况,即一个接口某个参数需要取另一个接口返回值; 平常写脚本过程,我经常会在同一个py文件,把相关接口调用方法都写好,这样一个文件能够很方便进行调用...,需要调整很多地方; 所以,当我们一个用例py文件写好某个接口调用方法,后续如果在其他py文件也要用到这个接口返回值,则直接引用先前py文件定义好接口调用方法即可。...:CreateActivity, 继承自unittest.TestCase 然后setUp方法中进行了一些必要初始化工作 最后创建了一个名为push_file_download方法,它作用就是调某个接口...view_activity 方法,它作用是查看数据详情 ; (3)第44行,创建一条查看活动数据详情测试用例test_case_01; 接下来重点: 在这条用例下调用view_activity方法...,而view_activity方法一个必传参数id,这个id就是由test_A.py文件CreateActivity类下 push_file_download 方法生成; 所以这里要先调用

    2.8K40

    2020-6-17-从0开始实现redux中间件机制

    这里主要是利用装饰器模式,实际任务执行之前,动态添加before和after逻辑。 这样就能形成一个洋葱模型 ?...,就可以实现日志功能了 dispatchAndLog(store, addTodo('Use Redux')) Monkeypatching 上一层方法虽然解决了重复代码问题,但是还是需要我们修改所有的...那有没有非入侵方式呢?有,就是MonkeypatchingMonkeypatching,简单来说就是用自己定义方法,替换对象原始方法。...最简单方法复制一遍逻辑。...试想一下,我们中间件代码,其实并不关心next方法是不是store.dispatch,只需要知道它能够链式处理action即可。 那么我们可以进一步隐藏这个概念。

    33210

    Bundler与Gemfile最佳实践 | Ruby

    但如果你写个library,那么你则应该抛弃gemfile.lock以确保library通用性。...Only specify top-level dependencies 一般gem都会在spec里写明其所依赖gems有哪些,并且bundler安装时候自动分析他们之间关系,所以大可不必去关心其中底层依赖...相当一部分其实只是为了提高你开发效率存在,所以最好把它们区别出来加以分组,比较好分成三组:开发、测试、线上。...,会让你偏离该gem主分支,今儿会错过很多必要更新和一些新特性 相比语义化版本而言,git提供hash值让人很难搞懂版本之间关系 更好解决方法给原gem提issue、patch,这样可以营造一个更好开源环境...是否添加一个新依赖到应用应该是件需要慎重决定事儿。gem带来便利同时也会增加维护成本,还会拖慢你应用。

    94220

    你所不知道「删除」操作

    Python ,有删除作用一般 del、remove 和 pop,相信很多人都用过,但是不是真的会有待商榷,下面我们先来看一个例子: lst1 = [1,2,3,4] lst2 = [1,2,3,4...很多人在用时候就只是用,没有真正去看到底用原理是什么,就比如这里「删除」,同样叫「删除」就真的一样?...lst1 前后没有改变;「remove」会删除第一个匹配到指定值,而不是说特定索引,如果没有找到指定值的话会抛出 ValueError 异常;最后「pop」则会删除指定索引处元素并且返回它,...看了上面对于三者「删除」之间不同,然后我再来解释「为什么输出 [2,4]」就很好理解了: Python 列表迭代按照索引进行,所以当我们从 lst2 或者 lst4 删除索引为0,也就是元素...现在我们明白了问题所在,最后我想再补充一点:文章最初,代码迭代时修改对象」一种很 stupid 做法,正确做法应该是迭代对象副本,如 lst3[:] 这种做法才是我们应该学习正确做法

    36320

    定义一个方法,功能找出一个数组一个只重复出现2次元素,没有则返回null。例如:数组元素为 ,重复两次元素为4和2,但是元素4排2前面,则结果返回

    寻找数组一个仅重复出现两次元素方法实现 在编程领域,经常会遇到需要从一个数组找出特定模式元素情况。...本篇博客,我们将探讨如何实现一个方法,该方法能够在给定整数数组,找出第一个仅重复出现两次元素。如果数组不存在这样元素,则方法将返回null。...问题背景 考虑以下情景:我们有一个整数数组,其中某些元素可能会重复出现,但我们只关注那些仅出现两次元素。我们目标找到这些仅重复出现两次元素,排在前面的那个元素。 1....定义一个方法,功能找出一个数组一个只重复出现2次元素,没有则返回null。...这个方法实现充分利用了LinkedHashMap特性来保持元素插入顺序,从而使我们能够找到符合条件一个元素。如果数组不存在符合条件元素,value将保持为0,表示未找到。

    20710

    你所不知道「删除」操作。

    Python ,有删除作用一般 del、remove 和 pop,相信很多人都用过,但是不是真的会有待商榷,下面我们先来看一个例子: lst1 = [1,2,3,4] lst2 = [1,2,3,4...很多人在用时候就只是用,没有真正去看到底用原理是什么,就比如这里「删除」,同样叫「删除」就真的一样?...lst1 前后没有改变;「remove」会删除第一个匹配到指定值,而不是说特定索引,如果没有找到指定值的话会抛出 ValueError 异常;最后「pop」则会删除指定索引处元素并且返回它,...看了上面对于三者「删除」之间不同,然后我再来解释「为什么输出 [2,4]」就很好理解了: Python 列表迭代按照索引进行,所以当我们从 lst2 或者 lst4 删除索引为0,也就是元素...现在我们明白了问题所在,最后我想再补充一点:文章最初,代码迭代时修改对象」一种很 stupid 做法,正确做法应该是迭代对象副本,如 lst3[:] 这种做法才是我们应该学习正确做法

    32310

    TodoBackend展示应用以及ActFramework实现

    关于TodoBackend TodoBackend一个公认服务器后端技术展示平台, 现在已有85个不同语言和框架展示项目(Showcase)加入这个平台上, 供开发人员参考学习....域模型 在这个实现我们使用了MongoDB作为数据存储. Act通过act-morphia插件提供了很好MongoDB支持....该插件依赖于官方Morphia文档对象转换层 ActMorphia之上提出了一个革新特性: AdaptiveRecord, 这个特性运行后端开发人员域模型类只声明参与后端计算逻辑字段....服务 传统Java Web应用像这个实现中将服务(也称为控制器)嵌入域模型类做法非常罕见: @Entity(value = "todo", noClassnameStored = true) public...另一方面我们其实鼓励使用这种方式来组织代码, 原因如下: 操作(服务)与数据(域模型)封装到一个模块面向对象提倡做法, 这样可以让应用内聚性增强 同时也提高了代码可读性.

    74850

    C语言动态内存管理超详解

    malloc和free都声明 stdlib.h 头文件。...return 0; } 使用 free 释放掉动态开辟空间有必要? 当然!尽管在上面这个简短代码,free步骤似乎并没有太大必要,因为程序很快就结束了,操作系统会自动回收这些空间。...情况2 当是情况2时候,原有空间之后没有足够多空间时,扩展方法堆空间上另找一个合适大小连续空间来使用,将原来空间数据拷贝到新空间,并将原来空间释放。...上述 代码一 和 代码二 可以完成同样功能,但是 代码一 实现有两个好处: 第一个好处:方便内存释放 如果我们代码一个给别人用函数,你在里面做了二次内存分配,并把整个结构体返回给用户...正确做法使用二级指针,将&str传过去。

    13810

    How to Improve Performance Your Cmd by Parallel

    进行汇总 SED, 想在一个巨大文件里使用sed命令做大量替换操作?...压缩一个非常大文件 bzip2比gzip更好压缩工具,但它很慢!别折腾了,我们有办法解决这问题。...,直接用mmap映射进内存巴拉巴拉 少年,这还是那个边角料脚本,你已经它上面操心一个小时了,还能不能愉快玩耍了 让 parallel来拯救你 版本3 1 2 3 4 5 import fileinput...嗯,虽然这个作者非常非常好,但是他总是命令前面输出一些慈善提示;当然我并不是讨厌这种做法,但看多了总有些疲劳,你懂~~ 我有一些参数想传给程序,怎么办?...1 seq 3|parallel --no-notice -q echo seq{} 这个命令很好,但是语法好像啰嗦了一些,还有其它替代命令

    44130

    如何快速学会一门新编程语言

    做为一名IT工程师 , 我四年学习、八年工作 ,不断学习各种编程语言 ,从一年学不会一门编程语言 , 到现在零 python 基础,两天能够学会 flask 编程 ,我总结出了自己一套学习方法...你跟着视频一行一行敲代码会发现 ,视频老师代码可顺利执行 , 为什么自己一样代码却运行报错 ? 重点你学完了一系列教程 ,你会写项目了吗 ?能够完成你想要完成项目?...你还需要学习一些其他东西 。 小结: 上述三种方法,通常是一个人学习一门新编程语言方法之一 ,这种学习方法有没有错 ? 当然没有 !尤其第三种学习方法很好学习方法 ,但是对你是否适用 ?...作为一名学生 , 你没有任何目的性学习可以 ,如果你学习一门新语言有明确目的,而且有时间限制 ,按照这几种类似的方法学习 ,你心里着急 ? 能够完成你目标 ?...比如大学生毕业涉及, 比如工作一个具体任务 ,你有那么多耐心,有那么学习时间 ? 下面我将把我学习过程分享给大家, 学习过程包括四步。 一、确定目标 。

    1.7K00

    Python冷知识:如何找出新版本增加或删除了哪些标准库?

    聊聊 Python 内置电池那么,我们会有这样一个话题:当 Python 发布了一个新版本时候,如何找出它比上一个版本(或者更早版本)增加或删除了哪些标准库呢?... 3.10 版本之前,想要获知标准库变化情况,确实不太方便。但是,自 3.10 起,Python 提供了一个非常便捷方法:sys.stdlib_module_names!...#sys.stdlib_module_names简单查看下它内容:图片如上可见,sys.stdlib_module_names 返回一个 frozenset 类型对象,其元素所有标准库名称。...值得注意,sys.stdlib_module_names 3.10 版本新特性,它之前,有一个相似的sys.builtin_module_names ,但它返回只是被解释器使用到内置模块...格式化 Python 代码文件时,对 import 标准库模块进行分组。

    47190

    关于初学Go语言一些事

    或者学习一门新语言时候,这个map不就是之前dict,只是稍稍不同而已,这个struct不就是Cstruct嘛。 这就是人类,本能属性,这是个优点。...类比记忆能让你快速记住这个人和关键字,也能消除陌生感。唯一有一点需要注意只是相似而已,不是相同。因此不要发出这样叫声:我靠,为毛Python里可以这样,在这却不行,什么破语言。...其实写多了发现比C要简单多了,对于一个在用Python战斗的人来说,我必然得把它映射到Python。你看那main不就是python if __name__ == "__main__" 。...但那是客户端做法,我觉得服务器端升级时直接在build一个然后放到服务器上就好了。比部署python简单多了。...掌握一门动态语言,再掌握一门静态语言必然极好,但是如何分配时间确实是个纠结问题。建议学生,编程新手还是focus一个语言上,培养特长(腿特长不算)。

    44920
    领券