【发布时间】:2021-04-22 16:52:24
【问题描述】:
我有一些类继承。
class A1:
def __init__(self, b):
self.b = b
def some_A_function():
print("This is A1 function")
# ... more A1 specific functions
class B(A1):
def __init__(self, a, b):
super().__init__(b)
self.a = a
# ... more B specific functions
class C(B):
def __init__(self, a, b)
super().__init__(a, b)
# ... more C specific functions
if __name__ == "__main__":
# Main instance
a = 1
b = 2
C_obj = C(a, b)
现在,A2类的一些介绍如下:
class A2:
def __init__(self, b):
self.b = b
def some_A_function():
print("This is A2 function")
现在,根据在创建类C 的实例时传递的a 的值,预计类B 的继承会发生变化。例如,如果a=1,则B 继承类A1,否则继承类A2。
我不想将任何代码更改为 A1、A2、C 和 main 类,因为它周围有大量代码,实际上很难对其进行重组反正。但是,我可以通过更改B 中的某些内容或调用一些独立的函数来实现基于a 的值的逻辑来决定B 的继承。
我一般是工厂功能的新手。我在搜索中找到的大多数示例都是在层次结构的最顶层实现的,它评估条件并返回类的相关实现(类似于 if a==1,return C1 else C2。但是,在我的情况,我不知道怎么说C类(在main函数中)要求B类继承A的两个实现之一(即A1,A2)基于作为变量 a 传递的值。
【问题讨论】:
-
我已经看过那个了。问题是,我无法对这个层次结构进行大规模重组。另一件事是,已在接受的答案中对层次结构最高级别的类进行了更改。就我而言,
__bases__的更改需要发生在最低级别的层次结构中。我没有处理程序来更改 bases 属性。
标签: python python-3.x inheritance python-class