【问题标题】:How to set keyword arguments values as other keyword arguments?如何将关键字参数值设置为其他关键字参数?
【发布时间】:2018-03-08 05:50:15
【问题描述】:

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

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

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

我想我可以这样做:

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

        if kwarg3 == '':
            self.kwarg3 = kwarg1

这有点丑。我知道这是一个奇怪的问题。只是有点好奇是否有更清洁的方法来实现这一点。

【问题讨论】:

    标签: python arguments refactoring keyword abstraction


    【解决方案1】:

    试试这个,将值 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
    

    【讨论】:

    • self.kwarg2 = kwarg2 or kwarg1 可能更有趣(仅当 kwarg2 不是虚假值时)
    • 这非常完美。我不知道您可以将 if 语句添加到变量赋值中。非常感谢。
    【解决方案2】:

    我猜你可以喷你的 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2022-01-26
      • 2018-11-14
      • 2010-10-17
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多