Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多重继承—;如何避免大量的空类?_Python_Structure_Multiple Inheritance - Fatal编程技术网

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):
?虽然,总的来说,我更喜欢这里的组合,以及尽可能浅的层次结构。例如,
苹果
蓝莓
应该只是
水果
类的实例,它们的
风味
属性不同。为什么他们要成为自己的班级?