如何根据条件从不同的 类 继承?

How can inherit from different classes depending on a condition?

我有两个 classes,A 和 B。它们都有一个 foo 方法。在某些情况下,我不想让我的 class C 从 A 继承 foo(和其他方法),在其他情况下从 B 继承。在代码示例中,C 将始终具有 A 的 foo 方法:

class A:
    def foo(self):
        print('A.foo()')


class B:
    def foo(self):
        print('B.foo()')


class C(A, B):
    pass


C().foo()

如何选择继承哪个 foo 方法?喜欢:

class C(A,B):
    def __init__(self, inherit_from):
        if inherit_from == "A":
            # inherit methods from A
        elif inherit_from == "B":
            # inherit methods from B

您不想让 C 成为一个子class,而是一个超级class,并在您决定创建哪种类型的对象时初始化对象,而不是在定义 class:

from abc import abstractmethod

class C:
    @abstractmethod
    def foo(self) -> None:
         pass

class A(C):
    def foo(self):
        print('A.foo()')

class B(C):
    def foo(self):
        print('B.foo()')

inherit_from = input("What type of C should I foo?")
if inherit_from == 'A':
    c: C = A()
elif inherit_from == 'B':
    c = B()
else:
    raise ValueError(f"unknown C subclass {inherit_from}")

c.foo()

请注意,这仅在您使用类型检查时才真正重要(即您希望能够保证 c 将成为实现 foo 方法的对象 - - C superclass 为您提供了一种方法,无需提前指定它是 A 还是 B)。如果您不使用类型检查,那么您可以完全跳过定义 class C