3

次のシナリオを想像してください。

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)
4

1 に答える 1

8
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)
于 2012-10-18T17:16:01.577 に答える