Python - 删除子类中的复制粘贴代码

时间:2014-11-06 18:56:40

标签: python coding-style refactoring

我的遗留代码中有两个类Z1Z0,基本上是一个复制粘贴。它们都包含函数f1() ... f6(),它们类似,函数f7(),它们在字符串中不同。 Class Z1包含string" Z1" Z0包含string" Z0"在function f7()

这些类具有以下继承层次结构:

class Z1(Y1)
class Y1(D)
class D(B)


class Z2(Y2)
class Y2(B)


Z1 -> Y1 -> D -> B
Z2 -> Y2 ------> B

在Python中摆脱这个复制粘贴代码的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您可以安全地将f1() ... f6()添加到B,那么您可以这样做,并使用type(self).__name__代替硬编码Z0Z1。这可能是最简单的解决方案,也是可能引入最大膨胀的解决方案。

如果你不想臃肿B,我可能会做一个单独的课(让我们说C),将f1()...f7()(修改后的f7)添加到{{1并且Z1和Z2都继承自C和Y1 / Y2 - 但是在这一点上你可能想要考虑重构代码。

无论哪种方式,您可能都希望使用内省来摆脱硬编码的类名,因为硬编码的东西不是很优雅:)