Python中能否在实例构造/初始化时指定继承的类?
动态调整子类继承逻辑的实现疑问
原始类结构
先定义三个基础类:
class A(): def method(self): print('A') self._method() def _method(self): pass class B(A): def _method(self): print('B') class C(A): def _method(self): print('C')
使用示例:
c = C() c.method()
需求目标
新增类D,用于修改A中method的行为:
class D(): def method(self): self._method() print('D') def _method(self): pass
希望B和C都能复用D的特性,但要避免代码冗余。
现有方案的冗余问题
目前有两种实现思路,但都存在明显冗余:
- 为每个子类创建继承自原子类的新类
class D_B(B): def method(self): self._method() print('D') class D_C(C): def method(self): self._method() print('D')
问题:D_B和D_C的method实现完全重复,当子类数量增多时,重复代码会急剧增加。
- 为每个子类创建继承自
D的新类
class B_D(D): def _method(self): print('B') class C_D(D): def _method(self): print('C')
问题:B_D、C_D的_method实现和原B、C完全一致,同样存在大量重复,维护成本高。
当前偏好的实现方案
直接修改类A,通过初始化标志位控制method的行为:
class A(): def __init__(self, flag = True): self.flag = flag def method(self): if self.flag: print('A') self._method() else: self._method() print('D') def _method(self): pass
这种方式避免了冗余,但希望能通过分离类的方式实现相同效果。
核心疑问
能否在构造/初始化实例时动态指定父类,例如:
b = B(A) c = C(D)
让b成为继承A方法的B实例,c成为继承D方法的C实例?这种实现是否可行?这类需求有没有特定的名称?
内容的提问来源于stack exchange,提问作者HellSaint
相关产品推荐
相关产品推荐

