【发布时间】:2018-10-07 05:28:23
【问题描述】:
我有以下类结构:
class Base:
def z(self):
raise NotImplementedError()
class A(Base):
def z(self):
self._x()
return self._z()
def _x(self):
# do stuff
def _a(self):
raise NotImplementedError()
class B(Base)
def z(self):
self._x()
return self._z()
def _x(self):
# do stuff
def _z(self):
raise NotImplementedError()
class C(A):
def _z(self):
print(5)
class D(B):
def _z(self):
print(5)
C(A) 和D(B) 的实现完全一样,并不关心它继承自哪个类。概念上的区别仅在于A 和B(并且这些需要作为单独的类保存)。我不想为C 和D 编写单独的定义,而是希望能够根据在创建@ 实例 时提供的参数从A 或B 动态继承@ 987654331@/D(最终C和D必须同名)。
似乎元类可能有效,但我不确定如何将 __init__ 参数传递给元类 __new__(以及这是否真的有效)。我真的更喜欢能解决课堂内部问题的解决方案。
【问题讨论】:
-
这个问题看起来接近this other one,如果不是真正的重复...
-
你为什么需要它?我觉得可能有更好的方法。
-
简而言之,我有类(
C和D以上)应该并行运行线程(A)或顺序运行(B)。总体结果行为与A或B相同,性能和准确性略有不同。所有A、B、C、D和Base的行为都极其相似,需要给定的继承结构,所以组合并不是很合适。你还有什么建议?
标签: python python-3.x inheritance metaclass