2

我有一个继承自不可变类型的类,它使用__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's 的源代码,但我不想更改它,因为ImmutableClass应该不知道SomeClass. SomeClass我曾考虑过使用全局变量,但如果部分开始第二次调用functionA,恐怕会做意想不到的事情。

4

0 回答 0