【发布时间】:2010-09-29 18:27:05
【问题描述】:
这是一个比特定语言更普遍的问题,尽管我在玩 python ncurses 模块时遇到了这个问题。我需要显示语言环境字符并将它们识别为字符,所以我只是快速地从 curses 模块中修补了一些函数/方法。
这就是我所说的快速而丑陋的解决方案,即使它有效。而且变化相对较小,所以我希望我没有搞砸任何事情。我的计划是找到另一个解决方案,但是看到它有效并且运作良好,你知道它是怎么回事,我继续解决我必须处理的其他问题,我确定如果没有错误,我永远不会让它变得更好。
不过,在我看来,更普遍的问题是——显然某些语言允许我们在类中对大块代码进行猴子补丁。如果这是我自己用的代码,或者改动很小,没关系。如果其他开发人员使用我的代码怎么办,他看到我使用了一些众所周知的模块,所以他可以假设它像以前一样工作。然后,这种方法突然表现得与它应该的不同。
那么,非常主观,我们是否应该使用猴子补丁,如果是,何时以及如何使用?我们应该如何记录它?
编辑:为@guerda:
Monkey-patching 是一种在执行时动态更改某些代码的行为的能力,而无需更改代码本身。
Python 中的一个小例子:
import os
def ld(name):
print("The directory won't be listed here, it's a feature!")
os.listdir = ld
# now what happens if we call os.listdir("/home/")?
os.listdir("/home/")
【问题讨论】:
-
能否请您简短地为新手解释一下“猴子补丁”?谢谢!
-
+1 这是主观的和有争议的,就像关于 SO 的大多数好问题一样
标签: oop language-agnostic monkeypatching