python - 防止 Python 类中的代码重复
问题描述
这是我的代码的一部分:
class classA(Something):
CONFIG={
"opt_a": "opt_b"
}
def construct(self):
Some Unique Code
.
.
.
.
Some Common Code
class classB(Something):
CONFIG={
"opt_a": "opt_b"
}
def construct(self):
Some Unique Code
.
.
.
.
Some Common Code
该部分超过 200 行,在和Some Common Code
中完全相同。我必须创建 5 个或更多这样的类。这将导致大量重复。classA
classB
更新:这些Some Common Code
部分由许多循环和其他依赖于数据的函数组成Some Unique Code
。
classA
拉斐尔的解决方案后更新:和中有一些常见的变量classB
。这些变量在“通用代码”和“唯一代码”中都使用。将它们从一个类移到另一个类会产生可变undefined
错误。
这是我更新后的代码:
class Something(Else):
CONFIG = {
"alpha": "beta"
}
def setup(self):
// Some Code
return self
def common_method(self):
for i in texts:
// Manipulates Boxes
class classA(Something):
CONFIG={
"opt_a": "opt_b"
}
def construct(self):
texts = []
texts.append('Apple')
.
.
.
.
self.common_method()
class classB(Something):
CONFIG={
"opt_a": "opt_b"
}
def construct(self):
texts = []
texts.append('Mango')
.
.
.
.
self.common_method()
我是 Python 新手,所以我不知道如何避免这种重复。任何帮助,将不胜感激。
谢谢。
解决方案
作为@Raphael 答案的替代方案,我们可以专注于“构造”方法并提出这样的结构:
class Something:
def common_method(self):
""" """
def construct(self):
self.common_method()
class ClassA(Something):
def construct(self):
# A-specific code
super().construct()
class ClassB(Something):
def construct(self):
# B-specific code
super().construct()
,但是如果没有更多细节,很难说什么会更好。
更新:如果您需要与不同方法一起使用公共变量,那么您需要将它们设置为object attributes
(或class attributes
)。
在python中有一个特殊的方法——__init__
用来构造一个对象。
这是您的案例的示例:
class Something(Else):
def __init__(self):
self.texts = []
CONFIG = {
"alpha": "beta"
}
def setup(self):
# Some Code
return self
def common_method(self):
# Manipulates Boxes
for i in self.texts:
pass
class classA(Something):
CONFIG={
"opt_a": "opt_b"
}
def construct(self):
self.texts.append('Apple')
self.common_method()
class classB(Something):
CONFIG={
"opt_a": "opt_b"
}
def construct(self):
self.texts.append('Mango')
self.common_method()
推荐阅读
- c - 数组 C 中数字的总和和平均值
- r - 编写脚本以忽略在 r 中找不到的对象
- angular - $q.allsettle 等价于 Angular 2 捕捉所有成功和失败
- automated-tests - 如何在发布管道视图中查看正在进行的测试的测试结果?
- css - WP Bakery 选项卡动画覆盖
- angular - 如何将数组对象推入另一个数组对象,打字稿
- node.js - Jasmine - 如何从规范覆盖范围中排除 node_modules
- python - 故障:在 EbxmlMessage 中指定的操作不存在
- r - 在 R 中创建“元数据”字段
- ionic-framework - 如何在使用 NavController 的 app.html 上使用 Ionic 3 组件?