Ruby 可以向 Number 类和其他核心类型添加方法以获得如下效果:
1.should_equal(1)
但Python似乎无法做到这一点。这是真的?如果是这样,为什么?这是否与以下事实有关:type不能修改吗?
我不想讨论猴子修补的不同定义,而是只想关注上面的示例。正如你们几个人的回答,我已经得出结论,这是不可能的。但我想要更详细的解释为什么它不能完成,也许什么功能(如果在 Python 中可用)可以允许这样做。
回答你们中的一些人:我的原因might想要做到这一点只是为了美观/可读性。
item.price.should_equal(19.99)
这读起来更像英语,清楚地表明哪个是测试值,哪个是预期值,如下所示:
should_equal(item.price, 19.99)
这个概念是什么Rspec http://rspec.info/以及其他一些 Ruby 框架都是基于的。
你不能。在Python中,C扩展模块(包括内置模块)中定义的所有数据(类、方法、函数等)都是不可变的。这是因为 C 模块在同一进程中的多个解释器之间共享,因此对它们进行猴子修补也会影响同一进程中不相关的解释器。 (通过以下方式可以在同一过程中使用多个解释器C API https://docs.python.org/3/c-api/init.html#sub-interpreter-support,并且已经有一些努力 https://www.python.org/dev/peps/pep-0554/使它们可以在 Python 级别使用。)
然而,Python 代码中定义的类可能会被猴子修补,因为它们对于该解释器来说是本地的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)