在一些__init__
个不同的类中,我必须多次使用构造
try:
self.member_name = kwargs['member_name']
except:
self.member_name = default_value
或按照Moses 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)
这将取代长长的try列表,并使代码更具可读性。
答案 0 :(得分:2)
如果您的try/except
意图处理KeyError
,那么您可以使用kwargs dict的get
方法,它允许您提供默认值:
self.member_name = kwargs.get('member_name', default)
可以使用setattr
扩展到您的属性名称列表:
for m_name, d_val in zip(member_names, default_values):
setattr(self, m_name, kwargs.get(m_name, d_val))