在不同類別的幾個__init__
我不得不多次使用該構造解釋輸入的字符串和類成員的名字
try:
self.member_name = kwargs['member_name']
except:
self.member_name = default_value
或摩西Koledoye的建議
self.member_name = kwargs.get('member_name', default_value)
我想有一種方法可以輸入字符串'member_name'
和default_value
,並且相應的初始化會被生成。例如,如果一個輸入'pi_approx'
和3.14
生成的代碼是
self.pi_approx = kwargs.get('pi_approx', 3.14)
這樣我可以通過沿着所有所需的成員和它們的默認值的列表的環取代這些初始化的長序列。
This technique emulate a switch statement是不一樣的東西,但有一種類似的味道。
我不知道如何處理我想要做的事情。
假設initializer(m_name, default_val)
是得到由
self.m_name = kwargs.get('m_name', default_val)
話,我會用它取代由具有列出member_names = [m_name1, m_name2, m_name3]
和default_values = [def_val1, def_val2, def_val3]
,並呼籲
for m_name, d_val in zip(member_names, default_values):
initializer(m_name, d_val)
這將更換長長的名單建設的嘗試,也使代碼更具可讀性。