Python DRY类初始化

时间:2019-01-03 10:57:11

标签: python-3.x

在不重复太多自己的情况下,初始化类的pythonic方法是什么?我经常看到的事情是,以下是浪费的事情:

class foo:
    def __init__(self, a=None, b=None, c=None,...)
        if a is None:
            a = a_default_value()
        if b is None:
            b = b_default_value()
        if c is None:
            c = c_default_value()

        assert sanity_check(a,b,c)

        self.a = a
        self.b = b
        self.c = c

感觉是简化代码的一种方法,应该是遍历字典(特别是在输入很多的情况下):

class foo:
    defaults = {
        'a' : a_default_value(),
        'b' : b_default_value(),
        'c' : c_default_value()}

    def __init__(self, **kwargs):
        for key in set(self.defaults) - set(kwargs):
            kwargs[key] = self.defaults[key]

        assert self.sanity_check(**kwargs)

        for key in kwargs:
            setattr(self, key, kwargs[key])

但这看起来还很丑吗?一定有更好的方法!

0 个答案:

没有答案