根据条件创建几乎相似的类,减少代码重复
我有三种情况,分别是:情况1、情况2和情况3:
我需要根据哪个情况为真来定义三个类。这些类几乎都有相同的方法,只是根据不同的情况在处理之前有些不同的步骤。我该怎么做才能避免重复写同样的代码呢?
match condition:
case: "Case1"
class class1:
def method(self):
do something to self
return self
case: "Case2"
class Class2:
def method(self):
preprocessing1 on self
do exact something as in case 1
return self
case: "Case3"
class Class2:
def method(self):
preprocessing2 on self
do exact something as in case 1
return self
怎么才能做到不重复写所有的代码呢?
2 个回答
1
我在尝试帮助别人,但我知道我会学到比我能教的更多。根据SIGHUP的建议,我正在重新整理类的定义。
class Class1:
def __init__(self,case="Case1"):
self.content = "Raw"
def method(self):
self.content = f"Class1 method applied to ({self.content})"
print(self.content)
return self
class Class2(Class1):
def __init__(self,case="Case2"):
super().__init__()
self.case = case
def _preprocessing_1(self):
self.content = f"_preprocessing_1 applied to ({self.content})"
print(self.content)
return self
def _preprocessing_2(self):
self.content = f"_preprocessing_2 applied to ({self.content})"
print(self.content)
return self
def method(self):
if self.case == "Case2":
self._preprocessing_1()
else:
self._preprocessing_2()
super().method() # do exact something as in case 1
return self
print("Case1")
c1 = Class1()
c1.method()
print("Case2")
c2 = Class2()
c2.method()
print("Case3")
c3 = Class2("Case3")
c3.method()
1
我会使用继承,唯一的缺点是每次都需要定义class1。
注意:我觉得返回self没有什么好处,因为你已经有了对它的引用。
根据你的例子,下面是伪代码的映射:
class class1:
def method(self):
do something to self
case "Case2":
class Class2(Class1):
def method(self):
preprocessing1 on self
super().method() # do exact something as in case 1
case "Case3":
class Class2(Class1):
def method(self):
preprocessing2 on self
super().method() # do exact something as in case 1