【发布时间】:2022-01-10 14:51:25
【问题描述】:
我有一个基类Foo 和另一个基类Bar。
我想创建两组Baz 类(例如Baz1, ..., Baz20),这样对于从1 到20 的每个N,都有一个继承自Foo 的BazN 类,还有一个BazN 继承自 Bar 的类。所以我最终会得到 40 个 BazN 类,其中 20 个是 BazNFoo,其中 20 个是 BazNBar 类型。
我所拥有的是下面的 sn-p,它显式地将每个 BazN 类写入两次,一次从 Foo 继承,一次从 Bar 继承。我的问题是,是否有一种编程方式来编写每个BazN 课程一次?我的Baz 课程很长。
class Foo:
def __init__(self):
# code specific to Foo
class Bar:
def __init__(self):
# code specific to Bar
class Baz1Foo(Foo):
def __init__(self):
super().__init__()
# code specific to Baz1
class Baz1Bar(Bar):
def __init__(self):
super().__init__()
# code specific to Baz1
class Baz2Foo(Foo):
...
【问题讨论】:
-
注意:Foo 和 Bar 有不兼容的信息,所以我不能简单地使用多重继承(例如,
class Baz1(Foo, Bar)) -
一个家长的20个孩子班级是一个非常奇怪的设计,他们会有什么不同的属性?这不是一个好主意,你不应该为此找到解决方案,而是完全不同的方式来做到这一点
-
我能问一下你为什么想要这样的设计吗?这看起来很像 X/Y 问题...
-
一个用例是如果父母
Foo和Bar是两个不同的数据库基类并且每个Baz是一个表模式。比如在sqlalchemy中,可以使用declarative_base创建一个Base类,或者显式创建一个Base类。 -
另外,如果我的任意 N=20 提出了公然的设计问题,我们深表歉意,同样的问题仅适用于 N=2-3(大)子类,其中一个人宁愿不复制相同的子代码两次。
标签: python class inheritance multiple-inheritance