多重继承——如何避免大量空类?
Multiple Inheritance — How to avoid lots of empty classes?
我想创建一个继承自两个 class 的 class(a
和 b
)及其 sub-classes。合并后的 child class 将没有独特的属性或方法,而是会继承其 children.
的所有内容
我的问题是我需要为 child class 的每种可能性创建一个空的 class。如果 class a
有 m
sub-classes 并且 class b
有 n
sub-classes 我需要创建m*n
空 sub-classes。实际上 m 和 n 小于 4,但创建大量空 classes 似乎不是很 pythonic。
有更好的方法吗?
我创建了一个虚拟示例,希望能弄清楚问题
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)
我不太喜欢的一个可能的解决方案是将单个 classes 作为 class
中的属性
class BakedFruitItem:
fruit: Fruit
baked_item: BakedItem
听起来你想要一个 class 工厂:
def make_baked_type(fruit, bake):
class baked_item(fruit, bake):
pass
return baked_item
ApplePie = make_baked_type(Apple, Pie)
item = ApplePie()
print(item.flavour())
# or
def make_baked_item(fruit, bake):
return make_baked_type(fruit, bake)()
item = make_baked_item(Apple, Pie)
print(item.flavour())
我想创建一个继承自两个 class 的 class(a
和 b
)及其 sub-classes。合并后的 child class 将没有独特的属性或方法,而是会继承其 children.
我的问题是我需要为 child class 的每种可能性创建一个空的 class。如果 class a
有 m
sub-classes 并且 class b
有 n
sub-classes 我需要创建m*n
空 sub-classes。实际上 m 和 n 小于 4,但创建大量空 classes 似乎不是很 pythonic。
有更好的方法吗?
我创建了一个虚拟示例,希望能弄清楚问题
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)
我不太喜欢的一个可能的解决方案是将单个 classes 作为 class
中的属性class BakedFruitItem:
fruit: Fruit
baked_item: BakedItem
听起来你想要一个 class 工厂:
def make_baked_type(fruit, bake):
class baked_item(fruit, bake):
pass
return baked_item
ApplePie = make_baked_type(Apple, Pie)
item = ApplePie()
print(item.flavour())
# or
def make_baked_item(fruit, bake):
return make_baked_type(fruit, bake)()
item = make_baked_item(Apple, Pie)
print(item.flavour())