Python 多重继承—;如何避免大量的空类?
我想创建一个从两个类(Python 多重继承—;如何避免大量的空类?,python,structure,multiple-inheritance,Python,Structure,Multiple Inheritance,我想创建一个从两个类(a和b)及其子类继承的类。组合的子类将不具有唯一的属性或方法,而是从其子类继承所有内容 我的问题是,我需要为每个可能的子类创建一个空类。如果类a有m子类,类b有n子类,我需要创建m*n空子类。实际上,m和n小于4,但创建大量空类似乎不是很符合Python 有更好的方法吗 我已经创建了一个虚拟示例,希望能把问题弄清楚 class BakedItem: pass class Fruit: pass class Pie(BakedItem): def
a
和b
)及其子类继承的类。组合的子类将不具有唯一的属性或方法,而是从其子类继承所有内容
我的问题是,我需要为每个可能的子类创建一个空类。如果类a
有m
子类,类b
有n
子类,我需要创建m*n
空子类。实际上,m和n小于4,但创建大量空类似乎不是很符合Python
有更好的方法吗 我已经创建了一个虚拟示例,希望能把问题弄清楚
class BakedItem:
pass
class Fruit:
pass
class Pie(BakedItem):
def bake(self):
pass
def add_pastry(self):
pass
class Tart(BakedItem):
def bake(self):
pass
class Cake(BakedItem):
def bake(self):
pass
class Apple(Fruit):
def flavour(self):
return "apple"
class Blueberry(Fruit):
def flavour(self):
return "Blueberry"
class Blueberry(Fruit):
def flavour(self):
return "Blueberry"
class ApplePie(Apple,Pie):
pass
class AppleCake(Apple,Cake):
pass
class BlueberryTart(Blueberry,Tart):
pass
# Etc (lots of empty multiple inheritance classes)
我不特别喜欢的一个可能的解决方案是将单个类作为类中的属性
class BakedFruitItem:
fruit: Fruit
baked_item: BakedItem
听起来你想要一个类工厂:
def make_baked_类型(水果、烘焙):
等级烘焙项目(水果、烘焙):
通过
返回烘焙的物品
ApplePie=制作烘焙类型(苹果、馅饼)
item=ApplePie()
打印(item.flavor())
#或
def制作烘焙项目(水果、烘焙):
返回制作烘焙类型(水果、烘焙)()
项目=制作烘焙项目(苹果、馅饼)
打印(item.flavor())
你为什么不喜欢作文?它通常比继承更受欢迎,事实上,它似乎是设计代码的自然方式,至少基于您的玩具示例。ApplePie
不是一种Apple
。AppleCake
也不是一种Apple
。在这种情况下,您误用了继承。“有更好的方法吗?”是的,通过您的设计。苹果派不是苹果的特产,它由苹果和其他成分组成。它不继承苹果的任何属性,所以不要使用继承。不管怎样,Tart
和Cake
类的意义是什么,它们没有做任何标记?为什么不直接继承自BakedItem
?也就是说,类蓝莓艺术(Blueberry,BakedItem):
?虽然,总的来说,我更喜欢这里的组合,以及尽可能浅的层次结构。例如,苹果
和蓝莓
应该只是水果
类的实例,它们的风味
属性不同。为什么他们要成为自己的班级?