monkeypatching相关内容
我有一个类,位于单独的模块中,我无法更改. from module import MyClass类替换类(对象)...我的类 = 替换类 除了这个文件之外,这不会改变 MyClass 的任何其他地方.但是,如果我要添加这样的方法 def bar():打印 123MyClass.foo = bar 这会起作用,并且 foo 方法将在其他任何地方都可用. 如何完全替换类? 解决方案
..
我想了解,什么是猴子补丁或猴子补丁? 这是否类似于方法/运算符的重载或委托? 这些东西有什么共同点吗? 解决方案 不,它不像任何这些东西.它只是在运行时动态替换属性. 例如,考虑一个具有方法 get_data 的类.此方法执行外部查找(例如,在数据库或 Web API 上),类中的各种其他方法调用它.但是,在单元测试中,您不想依赖外部数据源 - 因此您将 get_data
..
如果我的库有一个 contrib 额外的依赖项(比如 requests),我希望用户必须安装它才能访问 CLI API,但是我在 CI 中的测试期间安装了 contrib extra 如何使用 pytest 的 MonkeyPatch 在测试过程中删除依赖以确保我的检测正确? 例如,如果 contrib extra 将额外安装 requests 所以我希望用户必须这样做 $ python
..
我正在尝试使用 pytest 测试一些代码,并且需要更改某个模块中的函数.我的一个导入也导入了该函数,但是当我使用 monkeypatch 更改方法时,这会失败.这是我所拥有的: util.py def foo():raise ConnectionError # 模拟一个错误返回“酒吧" something.py from proj import utilneed_this = uti
..
我希望能够添加一个属性 http://docs.python.org/library/functions.html#property 到一个对象(类的特定实例).这可能吗? 关于在python中打鸭子/猴子补丁的一些其他问题: 向现有对象实例添加方法 Python:在运行时更改方法和属性 更新:由 delnan 在评论中回答 在python中动态添加@property
..
目标是创建一个行为类似于数据库结果集的模拟类. 例如,如果一个数据库查询返回,使用一个dict表达式,{'ab':100, 'cd':200},那么我想看到: >>>虚拟文件100 起初我想也许我可以这样做: ks = ['ab', 'cd']vs = [12, 34]C类(字典):def __init__(self, ks, vs):对于 i, k in enumerate(ks
..
Ruby 可以向 Number 类和其他核心类型添加方法以获得如下效果: 1.should_equal(1) 但似乎 Python 无法做到这一点.这是真的?如果是这样,为什么?和type不能修改有关系吗? 更新:与其讨论猴子补丁的不同定义,我只想关注上面的示例.我已经得出结论,正如你们中的一些人所回答的那样,这是不可能的.但我想更详细地解释为什么不能这样做,也许什么特性(如果在 Pyt
..
以下是我对故事的理解: PC 寄存器保存指向下一条指令的指针 LDR 指令正在将第二个操作数的值加载到第一个操作数中(例如) LDR r0, [pc, 0x5678] 相当于这个“C代码" r0 = *(pc + 0x5678) 它是使用基址偏移取消引用指针. 还有我的问题: 我找到了这个代码 LDR PC, [PC,-4] 它被评论为猴子补丁等. 我如何
..
我正在修补类的 __eq__ 方法.我发现以下有效: def eq(obj, other):如果 isinstance(other, str):返回 obj.name.upper() == other.upper()别的:return object.__eq__(obj, other) 这不起作用: def eq(obj, other):如果 isinstance(other, str)
..
这个问题是我在这里问的另一个问题的延续:如何拦截和修改任何对象的特定属性 这是一种用于拦截某个名称的任何对象的属性的方法,目的是在分配或读取时更改值或执行某个操作: Object.defineProperty(Object.prototype, "my_property", {设置:函数(值){this._value = 值;},得到:函数(){返回“改变";}});var some_
..
class Foo(object):经过foo = foo()定义栏(自我):打印“酒吧"Foo.bar = 酒吧foo.bar() #bar 来自 JavaScript,如果“类"原型增加了某个属性.众所周知,该“类"的所有实例都将在其原型链中具有该属性,因此无需对其任何实例或“子类"进行修改. 从这个意义上说,像 Python 这样的基于类的语言如何实现 Monkey 补丁? 解
..
我目前正在编写一个与竹构建服务器交互的小库.测试是使用 pytest 完成的.我陷入了以下问题.我想测试一个运行直到满足某些状态的 while 循环.阅读 pytest 文档,我试图“模拟"/monkeypatch 状态,但它并没有真正起作用.我可能在这里做错了一些基本的错误:这是有问题的while循环: # 判断当前状态运行 = self._is_a_build_running()# 在构建
..
在没有问题之前,我已经更改了其他类的属性._Element显然不是内置的. 从lxml.etree中的 导入_Element_Element.new_attr = 54 导致: TypeError: 无法设置内置/扩展类型 'lxml.etree._Element' 的属性 解决方案 _Element 是
..
部分类背后的想法是,您可以将某些功能组合在一起.在C#中最好的例子是将控件定义放在一个文件中,将事件处理程序放在另一个文件中.在Ruby中,您可以使用Monkey修补程序来替换整个函数等,以使代码完成您想要做的事情. 我还没有找到这样做的理由,但是随着网络的发展,我认为更多的应用程序将在客户端,因此我想知道我在服务器中是否找到了一些很棒的功能-其他语言,我也可以在Java语言中使用.
..
Object.prototype.getB = function(){//如何获取当前值返回a.b;};const a = {b:'c'};a.getB(); 如您所见,我想为所有Object值创建一个函数.我需要在此函数中获取对象值,然后执行某些操作. 解决方案 猴子修补 您要执行的操作称为猴子补丁-您将内置原型进行了变异.这样做有很多错误的方法,但我将演示一种当前最正确的方
..
我要做什么: 这里的第一个问题,对于任何错误深表歉意. 基本上我想做的是为网络摄像头实现过滤器,以便与您进行视频会议/通话/会议的每个人都可以在网络摄像头打开的情况下看到它.我的第一个想法是使用CSS过滤器,这在事后看来是愚蠢的,因为不会被所有人看到. 然后,我进行了一些研究(例如,谷歌搜索),发现了一个类似的WebExtension,ZomboCam(我用crxviewer看到
..
是否可以在Groovy中动态地向对象添加属性或方法?到目前为止,这是我尝试过的: class Greet { def name Greet(who) { name = who[0].toUpperCase() + [1..-1] } def salute() { println "Hello $name!" } } g = new Greet('world') // crea
..
我们已经在sqlserver 2008中使用了activerecord-sqlserver-adapter gem,并且一切正常.我们只是尝试针对新的sqlserver 2014数据库部署Rails 3应用程序,但出现错误消息: Currently, only 2005, 2008, 2010, 2011, and 2012 are supported. We got back Micros
..
出于测试的原因,我需要能够模拟在其他地方使用的装饰功能的内部/原始功能: 在mydecorator.py中: def my_decorator(f): def wrap_f(): 打印“已装饰” f () return wrapd_f @my_decorator def function_to_be_mocked(): 打印'原始' def funct
..
我有一个大型项目,其中在各个地方使用以下形式存在问题的隐式Unicode转换(强制转换): someDynamicStr =” bar“#可能来自各种来源 #作品 u” foo“ + someDynamicStr u” foo {} “ .format(someDynamicStr) someDynamicStr =” \xff“#哦,哦 #引发UnicodeDecodeE
..