python动态改变超级

时间:2014-06-13 08:20:00

标签: python

我有几个类,为了进行测试,我需要通过少量修改来复制这些类。最初,我只是将测试类更改为应该在进行必要的修改后模仿的类。

class Class_A(object):
    def __init__(self):
        do_class_A_stuff


class Class_B(object):
    def __init__(self):
        do_class_B_stuff

....

class Test(object):
    def __init__(self, classToMimic):
        doStuffForTest
        self.__class__ = classToMimic        

工作得很好。但是,现在我已经到了需要在do_classX_stuff之间运行一些测试方法的地步。因此,在更改类之前,我不能运行测试特定的过程,而是在超级的 init 之后。我的想法只是动态继承Test并覆盖一些方法,以便在必要时添加测试代码。

class Test(object):
    def __init__(self, classToMimic):
        self..__bases__ = classToMimic   

    def methodToOverwrite(self):
        doStuffForTest

这是一个好方法,如果是这样,我该怎么做?还是有更好的解决方案?

编辑:我有这个错误,正如Marijn指出的那样,我正在寻找。基础,而不是超级。改变了上面这个,我发现了更多的信息。

1 个答案:

答案 0 :(得分:4)

为什么不使用工厂来创建子类:

def test(classToMimic):

    class Test(classToMimic):

        def methodToOverwrite(self):
            doStuffForTest

    return Test