为了账号安全,请及时绑定邮箱和手机立即绑定

一个OOD设计问题,如何优雅地避免类似类属性的重复定义

一个OOD设计问题,如何优雅地避免类似类属性的重复定义

慕侠2389804 2024-01-04 16:27:34
我有一个问题,我枚举了某些对象的几种类型class Type(Enum):    TYPE_A    TYPE_B    TYPE_C    TYPE_D     ....class Something():    def __init__(self):        self.TYPE_A_list = []        self.TYPE_B_list = []        self.TYPE_C_list = []        self.TYPE_D_list = []        ...    def add_data(self, type: Type, value: int):        if type == TYPE_A:            self.TYPE_A_list.append(value)        elif type == TYPE_B:            self.TYPE_A_list.append(value)        elif type == TYPE_C:            self.TYPE_A_list.append(value)        elif type == TYPE_D:            self.TYPE_A_list.append(value)        ....我想知道有什么方法可以防止这种类型的重复初始化吗?不同的类型可以有一个父类,但是如何处理我需要创建的列表?任何建议都会有帮助。先感谢您。
查看完整描述

1 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

您可以将它们全部存储在字典中,并以数据类型作为键,而不是为每个列表设置单独的属性。然后你就可以有一个 get 方法来访问它。


class Something():

    def __init__(self):

        self.list_dict = {}


    def add_data(self, data_type: Type, data_value: int):

        try:

            self.list_dict[data_type].append(data_value)

        except KeyError:

            self.list_dict[data_type] = [data_value]


    def get_data(self, data_type)

        return self.list_dict[data_type]

其中 type_a 是相应数据类型的类/数据类型,由 type() 返回。

也许最佳实践是使用集合的defaultdict来避免 try/ except:

from collections import defaultdict


class Something():

    def __init__(self):

        self.list_dict = defaultdict(list)


    def add_data(self, data_type: Type, data_value: int):

        self.list_dict[data_type].append(data_value)

 

    def get_data(self, data_type)

        return self.list_dict[data_type]

 

另外,作为旁注,我会避免使用变量名称类型,因为它已经是python 标准库中的内置函数。


查看完整回答
反对 回复 2024-01-04
  • 1 回答
  • 0 关注
  • 44 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信