Ruby 可以向 Number 类和其他核心类型添加方法来获得如下效果:
1.should_equal(1)
但似乎 Python 无法做到这一点。这是真的?如果是这样,为什么?跟不能修改 类型 有关系吗?
我不想谈论猴子补丁的不同定义,而是只想关注上面的例子。正如你们中的一些人所回答的那样,我已经得出结论,这是不能做到的。但我想要更详细的解释为什么它不能完成,如果在 Python 中可用的话,也许什么功能允许这样做。
回答你们中的一些人:我 可能 想这样做的原因仅仅是美观/可读性。
item.price.should_equal(19.99)
这读起来更像英文,并且清楚地表明哪个是测试值,哪个是期望值,应该是:
should_equal(item.price, 19.99)
这个概念是 Rspec 和其他一些 Ruby 框架所基于的。
原文由 airportyh 发布,翻译遵循 CC BY-SA 4.0 许可协议
这里的 Monkey Patch 到底是什么意思?有 几个略有不同的定义。
如果你的意思是,“你能在运行时改变一个类的方法吗?”,那么答案是肯定的:
如果您的意思是,“您能否在运行时更改类的方法 并使该类的所有实例事后更改?”那么答案也是肯定的。稍微改变一下顺序:
但是您不能对某些内置类执行此操作,例如
int
或float
。这些类的方法是用 C 实现的,为了使实现更容易、更高效,牺牲了某些抽象。我不太清楚您 为什么 要改变内置数字类的行为。如果您需要改变它们的行为,请将它们子类化!!