如何将关键字参数值设置为其他关键字参数?

时间:2018-03-08 05:50:16

标签: python arguments refactoring keyword abstraction

是否有(干净,简单)方法将关键字args设置为参数列表中的其他关键字参数?像这样:

class Foo():
    def __init__(self, kwarg1='a', kwarg2=kwarg1, kwarg3=kwarg1):

我基本上需要所有三个都具有相同的默认值而不对其进行硬编码。这样,如果用户想要将kwarg1编辑为其他内容,则默认为kwarg2和{{1也将默认为新值;但如果需要,仍然会允许自定义kwarg3kwarg2的功能。

我想我可以这样做:

kwarg3

这有点难看。我知道这是一个奇怪的问题。如果有更清洁的方法来实现这一点,那就有点好奇了。

2 个答案:

答案 0 :(得分:0)

试试这个,将值None设置为kwarg1kwarg2可能对您有所帮助。

class Foo:
    def __init__(self,kwarg1='a',kwarg2=None,kwarg3=None):
        self.kwarg1 = kwarg1
        self.kwarg2 = kwarg2 if kwarg2 != None else self.kwarg2 = kwarg1
        self.kwarg3 = kwarg3 if kwarg3 != None else self.kwarg3 = kwarg1

答案 1 :(得分:0)

我猜你可以摧毁你的kwargs并使用dict.setdefault

class Foo():
    def __init__(self, **kwargs):
        kwargs.setdefault('kwarg1', 'a')
        kwargs.setdefault('kwarg2', kwargs['kwarg1'])
        kwargs.setdefault('kwarg3', kwargs['kwarg1'])

        self.__dict__.update(kwargs)