| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> Python进阶:猴子补丁 -> 正文阅读 |
|
[Python知识库]Python进阶:猴子补丁 |
猴子补丁是一项允许在运行时更改对象行为的技术。 它是一个非常有用的功能,但它也可能使你的代码更难以理解和调试,因此,在实现猴子补丁程序时必须谨慎。 猴子补丁的用法猴子补丁与Python中的灵活性紧密相关。 自定义对象是可变的,因此可以替换其属性而无需创建该对象的新副本。
我们在最开始的地方做了猴子补丁,即使用
再来看一个例子:
下面我们做一个猴子补丁,将类中的
注意:该有的参数还是要有,但名称可以不一样,类中原本应该是是 可以看到,上面类中并没有定义
原因是我们不希望去修改类中的源代码,而后者的修改也只是暂时性的,像用在测试时。 当然,猴子补丁不会允许你任意的使用,它是有限制的,它限制你不能给内置类型打补丁。比如要给
这里的原因是可以保证内置的功能都是原本的,避免有人去打补丁后,导致后续一堆奇怪的问题。需要切记,猴子补丁不可乱用! types.MethodType很类似猴子补丁,来看一个
既然提到了
我们先定义一个类和一个函数
我们利用
可以看到,
在使用静态方法时,类中的
这里不需要绑定,因为静态方法不需要任何的参数,只要赋值了就直接用。但注意需要使用类名来调用。
下面定义一个类方法
动态添加可以做到什么呢?一款APP,在没有进行整个APP的情况下,里面的部分功能变了。即我部分的功能代码存在一个文件中,我在后台默默更换这些文件,下次你再打开APP,对应的功能或者样式就变了。这是不是就是类似猴子补丁呢? 什么时候用去猴子补丁?猴子补丁非常强大,它显示了Python的灵活性。下面就来思考一下何时用猴子补丁。 作为一般规则,最好不要打猴子补丁。例如,如果要更改程序的行为,则可以为要更改的类定义子类。猴子补丁的问题在于程序的行为变得更加难以理解,要追溯行为的变化变得非常复杂。但是,有时可能会有很大的好处。例如,使用 请参阅下面的示例:
现在,无论何时使用 另外,常见的情况是测试。有时,你想在缺乏某些功能的环境中测试代码,或者由于测试实际上是在修改实时数据库,因此想防止这种情况。在这种情况下,可以在进行测试之前更改与数据库通信的方法。 即在测试程序时先避免与设备通信。 总之,究竟如何实现此行为将取决于具体情况。 参考 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/26 14:40:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |