python动态变化的超级
我有几个类,为了进行测试,我需要对这些类进行一些小的修改。最初,我只是在做了必要的修改之后,将一个测试类更改为它应该模拟的类python动态变化的超级,python,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
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_之间运行一些测试方法。因此,我不能在更改类之前运行特定于测试的过程,也不能在super的init之后运行。我的想法是动态继承测试并覆盖一些方法,以便在必要时添加测试代码
class Test(object):
def __init__(self, classToMimic):
self..__bases__ = classToMimic
def methodToOverwrite(self):
doStuffForTest
这是一个好方法吗?如果是,我该如何做?或者有更好的解决方案吗
编辑:正如Marijn指出的那样,我的观点是完全错误的。我正在寻找的是基础,而不是超级。改变了上面的内容,我目不转睛地看着这个,发现了更多的信息 为什么不使用工厂创建子类:
def test(classToMimic):
class Test(classToMimic):
def methodToOverwrite(self):
doStuffForTest
return Test
为什么不使用工厂创建子类:
def test(classToMimic):
class Test(classToMimic):
def methodToOverwrite(self):
doStuffForTest
return Test
“这是一个好方法吗”。。。你所做的事使我害怕。所以不…到底是什么让你这么做的?我还是不确定我是否理解你做得足够好以至于害怕。如果您提供了一些简单的代码来实际运行以演示问题。。。FWIW,我怀疑最好的解决方案是使用某种模拟框架…而且,我完全不确定这与
super
…有什么关系super()
是一个生成特殊对象的函数,它将与类继承结构一起工作,以查找该结构更高的属性,例如,当您已覆盖这些属性时。您试图做的是动态地设置类的基础。“这是一个好方法吗”。。。你所做的事使我害怕。所以不…到底是什么让你这么做的?我还是不确定我是否理解你做得足够好以至于害怕。如果您提供了一些简单的代码来实际运行以演示问题。。。FWIW,我怀疑最好的解决方案是使用某种模拟框架…而且,我完全不确定这与super
…有什么关系super()
是一个生成特殊对象的函数,它将与类继承结构一起工作,以查找该结构更高的属性,例如,当您已覆盖这些属性时。你要做的是动态地设置你的类的基础。谢谢Dan,我想这对我来说是很简单的。看起来比我复杂的路径更干净谢谢Dan我想这对我来说很简单。看起来比我曲折的道路更干净