亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一個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 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號