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不在同一对象上运行。这就是为什么成员变量不能工作的原因——不是因为它是不可变的,而是因为它是不同的对象。