将私有属性传递到实用函数中

问题描述 投票:0回答:1

我有 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个解决方案:

  1. merge_util
    定义为每个类的方法,但随后我会为每个类重复代码。

  2. 使用继承。这些类几乎没有相似之处,否则为什么我从一开始就没有使用继承并希望避免这种情况。

我可以考虑其他方法吗?

python oop encapsulation private-members
1个回答
0
投票

您可以考虑使用 merge_util 定义 MergeClass 并通过组合将其传递给您的类构造函数。从类内部调用它不会违反封装,因为您的私有属性不会流向外部函数,而是流向内部服务实例。

© www.soinside.com 2019 - 2024. All rights reserved.