我有 3 个带有合并操作的类,它们使用不同的参数执行相同的操作。
这是我目前所做的骨架代码:
class FirstClass:
def __init__(self):
# define constructor
def merge(self, other):
# merge other into self
merge_util(src=other, dest=self)
class SecondClass:
def __init__(self):
# define constructor
def merge(self, other):
# merge other into self
merge_util(src=other, dest=self)
# ThirdClass defined identically
merge_util
定义如下:
def merge_util(src, dest):
# merge src's private attributes (an array, list, and database table) into dest
问题是这种设计似乎违反了封装性。外部函数正在访问私有/受保护的属性。
我想到了2个解决方案:
将
merge_util
定义为每个类的方法,但随后我会为每个类重复代码。
使用继承。这些类几乎没有相似之处,否则为什么我从一开始就没有使用继承并希望避免这种情况。
我可以考虑其他方法吗?
您可以考虑使用 merge_util 定义 MergeClass 并通过组合将其传递给您的类构造函数。从类内部调用它不会违反封装,因为您的私有属性不会流向外部函数,而是流向内部服务实例。