实例化类时动态选择继承?

时间:2019-02-26 21:16:19

标签: python inheritance

class classA:
    def common(self):
        print('A')

class classB:
    def common(self):
        print('B')

class classC:
    def workflow(self):
        print('Do something')
        self.common()
        print('Do something else')


A = classC() # Here I want to create classC that inherits from classA
A.workflow()
assert isinstance(A, classA)

B = classC() # Here I want to create classC that inherits from classB
B.workflow()
assert isinstance(B, classB)

在此示例中,我有classAclassB都实现了功能common(),该功能输出不同的值。我想让classC从这些类之一中继承,这样workflow()的行为会略有不同,具体取决于它继承的common()方法。这样做的主要目的是拥有一种workflow()方法,其中self.common()的结果根据继承而变化。

实例化classC时如何选择从classC继承的类?

1 个答案:

答案 0 :(得分:0)

您不能为单个对象选择其他父类; classes 处理继承。也就是说,您可以根据需要直接使用type创建一个 new 类。您不会直接使用classC,而是从classC以及classAclassB的适当一个继承的子类,将两者视为混合课程。

a = type("pick-a-name", (classC, classA), {})()
b = type("pick-a-name", (classC, classB), {})()

您会注意到这里有一个额外的开销,因为每次尝试实例化一个对象时,都必须首先创建一个新类。你还不如 立即定义子类。

class Ca(classC, classA):
    pass

class Cb(classC, classB):
    pass