如何根据条件从不同的 类 继承?
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
。
我有两个 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
。