当前位置: 首页 > 面试题库 >

Python-什么是Monkeypatching丁?

公西鸿博
2023-03-14
问题内容

我想了解什么是Monkeypatching丁?

是类似方法/操作符的重载或委派吗?

这些东西有什么共同点吗?


问题答案:

不,这不像任何事情。它只是在运行时动态替换属性。

例如,考虑一个具有method的类get_data。该方法进行外部查找(例如,在数据库或Web API上),并且类中的各种其他方法都调用它。但是,在单元测试中,你不希望依赖于外部数据源-因此,你可以用get_data返回一些固定数据的存根动态替换该方法。

由于Python类是可变的,而方法只是类的属性,因此你可以根据需要进行任意操作-实际上,你甚至可以以完全相同的方式替换模块中的类和函数。

但是,正如评论员指出的那样,在进行猴子修补时要格外小心:

如果除了测试逻辑调用之外还有其他要求get_data,它还会调用猴子修补的替代品,而不是原始替代品-可能是好是坏。提防。

如果存在某个变量或属性get_data,在你替换它时也指向该函数,则该别名将不会更改其含义,并将继续指向原始get_data。(为什么?Python只是get_data将类中的名称重新绑定到其他函数对象;其他名称绑定完全不受影响。)



 类似资料:
  • 问题内容: 我想了解什么是猴子补丁或猴子补丁? 是方法/操作符重载还是委派? 这些东西有什么共同点吗? 问题答案: 不,这与任何事情都不一样。它只是在运行时动态替换属性。 例如,考虑一个具有method的类get_data。该方法进行外部查找(例如,在数据库或Web API上),并且类中的各种其他方法都调用它。但是,在单元测试中,您不希望依赖于外部数据源-因此,您可以用get_data存根(返回一

  • Python 是荷兰人 Guido van Rossum (吉多·范罗苏姆,中国程序员称其为“龟叔”)在 1990 年初开发的一种解释型编程语言。 我们已经在《编译型语言和解释型语言的区别》一文中讲解什么是解释型语言。 图1:Python 的标志(Logo) Python 的诞生是极具戏曲性的,据 Guido 自述记载,Python 语言是在圣诞节期间为了打发无聊的时间而开发的,之所以会选择 Py

  • 问题内容: 谁能解释一下,setup.py它是什么以及如何配置或使用? 问题答案: 是文件,通常会告诉你要安装的模块/软件包已与Distutils打包并分发,Distutils是分发Python模块的标准。 这使你可以轻松安装Python软件包。通常写就足够了: 将使用安装模块。避免直接致电。

  • 问题内容: 元类是什么,我们将它们用于什么? 问题答案: 元类是类的类。类定义类的实例(即对象)的行为,而元类定义类的行为。类是元类的实例。 虽然在Python中你可以对元类使用任意可调用对象(例如Jerub演示),但是更好的方法是使其成为实际的类。是Python中常见的元类。它本身是一个类,并且是它自己的类型。你将无法纯粹使用Python 重新创建类似的东西,但是Python有点作弊。要在Pyt

  • 问题内容: 现在很清楚什么是元类,有一个相关的概念我一直都在使用,而并不知道它的真正含义。 我想每个人都在括号里犯了一个错误,导致了“对象不可调用”异常。而且,使用并导致怀疑这种血腥的用途。 您能给我一些解释,包括魔术方法的例子吗? 问题答案: 可调用对象是可以调用的任何东西。 所述内置的可调用()检查该参数可以是: 具有方法的类的实例或 是具有非成员的类型,该成员以其他方式指示可调用性(例如在函

  • 问题内容: , :在Python 中做什么? 在这种情况下是什么意思? 问题答案: 简而言之,它遍历组合在一个元组中的可迭代元素(如列表)以及索引号: 版画 如果你要遍历一个序列(或其他可迭代的事物),并且还希望有一个索引计数器,这将很有帮助。如果你希望计数器从其他值(通常为1)开始,则可以将其作为第二个参数。