【问题标题】:python explicitly not passing optional parameterpython明确不传递可选参数
【发布时间】:2012-10-18 17:07:57
【问题描述】:

想象以下场景:

class A:
    def __init__(self, arg1=3, arg2=5):
        pass

def createA(arg1=None, arg2=None):
    if arg1 is None:
        if arg2 is None:
            a = A()
        else:
            a = A(arg2=arg2)
    else:
        if arg2 is None:
            a = A(arg1=arg1)
        else:
            a = A(arg1=arg1, arg2=arg2)
    return a

实现此行为的最佳方式是什么,请记住以下几点:

  • 我不能/不想换课A
  • 我不想将A的构造函数参数的默认值显式添加到createA函数中?

例如,是否有任何值指示未传递的可选参数? 比如:

if arg1 is None:
    newArg1 = NotPassed
else:
    newArg1 = arg1

if arg2 is None:
    newArg2 = NotPassed
else:
    newArg2 = arg2
A(arg1=newArg1, arg2=newArg2)

【问题讨论】:

    标签: python optional-parameters


    【解决方案1】:
    def create_A(arg1=None, arg2=None):
        kwargs = {}
        if arg1 is not None: kwargs['arg1'] = arg1
        if arg1 is not None: kwargs['arg2'] = arg2
        return A(**kwargs)
    

    甚至可能

    def create_A(**kwargs):
        return A(**kwargs)
    

    【讨论】:

    • 很好,我只是想知道为什么 Python 作为一种现代语言没有为这种行为提供特殊的价值。 A(arg1=1, arg2=Empty) 之类的东西可能...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    相关资源
    最近更新 更多