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

我有一个问题,我枚举了某些对象的几种类型


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)

        ....


我想知道有什么方法可以防止这种类型的重复初始化吗?不同的类型可以有一个父类,但是如何处理我需要创建的列表?任何建议都会有帮助。先感谢您。


慕侠2389804
浏览 47回答 1
1回答

喵喔喔

您可以将它们全部存储在字典中,并以数据类型作为键,而不是为每个列表设置单独的属性。然后你就可以有一个 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 defaultdictclass 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 标准库中的内置函数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python