我有一段代码想要重构。基本上有三个函数是复制粘贴的,除了它们的名称X,Y,Z。只有函数名称create?和变量errContext中的字符串发生变化。
class Derived(Base):
def createX(self):
try:
errContext = "X has fatal errors."
# .... code .....
except Exception, e:
raise w
def createY(self):
try:
errContext = "Y has fatal errors."
# .... code .....
except Exception, e:
raise w
def createZ(self):
try:
errContext = "Z has fatal errors."
# .... code .....
except Exception, e:
raise w我重构它的第一个尝试如下所示:
class Derived(Base):
def _create(self, name):
try:
errContext = "%s has fatal errors." % (name)
# .... code .....
except Exception, e:
raise w
def createX(self):
self._create('X')
def createY(self):
self._create('Y')
def createZ(self):
self._create('Z')这是正确的吗?或者,有没有更好的方法来做这件事,比如使用闭包?现在,我使用Clone Digger和CPD进行复制粘贴检测。它们非常有用。
发布于 2014-08-22 06:34:25
如果你想保持向后兼容性,我看起来不错。否则,只需在新类中保留一个create函数即可。
https://stackoverflow.com/questions/25436613
复制相似问题