如何在函数链中添加新参数到不可变类型的子类?

时间:2012-12-21 04:35:57

标签: python inheritance parameter-passing immutability

我有一个继承自使用__new__的不可变类型的类。我如何向一个函数添加一个新参数并优雅地将它传递给第二个函数,我知道它在执行链中?

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函数中,但这感觉有些混乱。这些函数的调用者可能会在错误输出之前传递无效参数一段时间,或者将标志传递给某个非预期的函数。我希望有一些我没有看到的明显解决方案。

我知道ImmutableClassfunctionA拨打functionB,然后拨打functionC。但是,functionB中的调用位于代码的中间,因此我不能简单地添加/追加新调用。我不能使用成员变量(据我所知),因为__new__在调用的一半时重新初始化它。我可以访问ImmutableClass的来源,但我不想改变它,因为ImmutableClass应该不了解SomeClass。我曾经想过使用一个全局变量,但是如果SomeClass的部分开始第二次调用functionA,我担心会出现意想不到的事情。

0 个答案:

没有答案