2

を使用する不変型から継承するクラスがあります__new__。新しいパラメーターを 1 つの関数に追加し、実行チェーンにあることがわかっている 2 番目の関数にエレガントに渡すにはどうすればよいでしょうか?

class ImmutableClass(ImmutableType):
    def functionA(param1=None, param2=None):
        # Do some stuff
        stuff self.functionB(param2)
        # Do some more stuff
        return stuff

    def functionB(param2):
        # Do some stuff
        newObjects = [ImmutableClass() for x in range(len(param2))]
        stuff = self.functionC(newObjects)
        # Do some more stuff
        return stuff

    def functionC(param3=None):
        # Do some stuff
        return stuff

class SomeClass(ImmutableClass):
    def __new__(cls, *args, **kwargs):
        return ImmutableClass.__new__(SomeClass, *args, **kwargs)

    def functionA(self, newParameter=True):
        # How do I pass newParameter to functionC?
        return super(ImmutableClass, self).functionA(*args, **kwargs)

    def functionC(self, newParameter=True):
        # How do I get the parameter from functionA?
        if not newParameter:
            print 'Success!'
        return super(ImmutableClass, self).functionC(*args, **kwargs)

チェーン内のすべての の関数に **kwargs を追加できることはわかっていますImmutableClassが、これは少し面倒に感じました。これらの関数の呼び出し元は、エラーが発生したり、意図しない関数にフラグを渡したりする前に、かなり長い間無効な引数を渡す可能性がありました。私が見ていない明らかな解決策があることを願っています。

callがあり、それが を呼び出すことは知っImmutableClassています。ただし、呼び出しはコードの途中にあるため、新しい呼び出しを単純に先頭/末尾に追加することはできません。呼び出しの途中でメンバー変数を再初期化するため、(私が知る限り)メンバー変数を使用できません。のソースにアクセスできますが、 の知識がないため、変更したくありません。グローバル変数を使用することを考えましたが、 のセクションが2 番目の functionA の呼び出しを開始すると、予期しないことが起こる可能性があるのではないかと心配しています。functionAfunctionBfunctionCfunctionB__new__ImmutableClassImmutableClassSomeClassSomeClass

4

0 に答える 0