在this回答它显示为属性传递给类__init__
Python 2.7:使用setattr设置所有args/kwargs属性是否很好?
例如,kwargs/ARGS如何自动设置,我们可以这样做:
class Employee(object):
def __init__(self, *initial_data, **kwargs):
# EDIT
self._allowed_attrs = ['name', 'surname', 'salary', 'address', 'phone', 'mail']
for dictionary in initial_data:
for key in dictionary:
if key in self._allowed_attrs: # EDIT
setattr(self, key, dictionary[key])
for key in kwargs:
if key in self._allowed_attrs: # EDIT
setattr(self, key, kwargs[key])
在我来说,我已经提前知道论点我将通过,所以我正在考虑这个解决方案只有一个较少的重复和较短的代码。
这是否被认为是良好做法? 这是针对手动初始化每个属性的解决方案的赞成/反对?还有其他更好的方法吗?由于第一条评论/回答(正确)侧重于清理参数或列出参数,我认为在这个框架中可以很容易地解决这个问题。
从[的Python禅](https://www.python.org/dev/peps/pep -0020 /):'显式优于隐式.'。你需要调用者将'* args'绑定到字典中。 – AChampion
感谢您的评论,但我想我会反对'美丽胜于丑陋'和'可读性计数'。 25行'self.something = kwargs ['something']'对我来说看起来并不漂亮或不可读,但这显然是个人的品味 – FLab
我不同意可读性,我会指出'稀疏比密集好','难以解释“等。总的来说,我不会赞成这种做法。 – AChampion