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

Python 如何向函数链中不可变类型的子类添加新参数?,python,inheritance,parameter-passing,immutability,Python,Inheritance,Parameter Passing,Immutability,我有一个类继承自使用\uuuu new\uuu的不可变类型。我如何向一个函数添加一个新参数,并将其优雅地传递给第二个函数,我知道它在执行链中 class ImmutableClass(ImmutableType): def functionA(param1=None, param2=None): # Do some stuff stuff self.functionB(param2) # Do some more stuff

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

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)
我知道我可以在链中的所有
ImmutableClass
函数中添加**kwargs,但这感觉有点混乱。这些函数的调用者可能会在出错之前传递一段时间的无效参数,或者将标志传递给某个意外的函数。我希望有一些明显的解决办法,我没有看到


我知道
ImmutableClass
function
调用
functionB
,然后调用
functionC
。但是,在<代码>函数Bub/COD>中的调用位于代码的中间,所以我不能简单地添加/追加新的调用。我不能使用成员变量(据我所知),因为
\uuuu new\uuuu
在调用的中途重新初始化了它。我可以访问
ImmutableClass
的源代码,但我不想更改它,因为
ImmutableClass
应该不知道
SomeClass
。我曾想过使用全局变量,但我担心如果
SomeClass
的一部分开始第二次调用functionA,可能会发生意想不到的事情。

我不理解
functionA
functionac
之间的相关性,为什么不能使用成员变量?你真的试过了吗?我试过一个成员变量,只要调用
\uuuu new\uuu
,它就会被重新初始化。在functionA-C的执行过程中,
\uuuuuu new\uuuu
被调用了好几次,我无法控制。我很困惑,您的示例代码根本没有显示被调用的
\uu new\uuu
function c
是否没有在与
function
相同的对象上被调用?现在我想起来了,这是正确的。functionC与functionA不在同一对象上运行。这就是为什么成员变量不能工作的原因——不是因为它是不可变的,而是因为它是不同的对象。