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

2024-04-20 02:00:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类继承自使用__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)

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

我知道ImmutableClass有{}调用functionB,然后调用{}。但是,functionB中的调用在代码的中间,所以我不能简单地预先添加/追加新的调用。我不能使用成员变量(据我所知),因为__new__在调用中途重新初始化了它。我可以访问ImmutableClass的源代码,但我不想修改它,因为ImmutableClass应该不知道{}。我曾考虑过使用全局变量,但如果SomeClass的部分启动第二个function调用,这可能会导致意想不到的事情。在


Tags: 函数selfnewreturndefargssomedo