问题描述
我想了解如何在我的程序中实现多重继承或 MixIn。
我的想法是我有一个 Car 类,它使用 MixIns 添加来自不同性能助推器(如冷空气进气和增压器)的方法。所以像下面这样,虽然我知道这行不通。
car1 = Car(Turbocharger,ColdAirIntake)
car2 = Car(Supercharger)
car3 = Car(Nitrous)
我找到了这个例子,但不确定这是否是实现我所想的正确方法。
Dynamically mixin a base class to an instance in Python
解决方法
您可以通过动态定义汽车类来创建实例:
def make_car(*bases):
class dynamic_car(*bases,Car):
pass
return dynamic_car()
car1 = make_car(Turbocharger,ColdAirIntake)
car2 = make_car(Supercharger)
car3 = make_car(Nitrous)
,
不确定我是否完全理解你,但如果你只想理解你提到的内容,请看这个简单的例子:
class Turbocharger(dict):
# Define any class attributes.
def __init__(self):
# Define any instance attributes here.
super().__init__()
def __call__(self,*others):
for other in others:
# You'd want to check if it's a mixin,isinstance()?
self.update(other)
class Supercharger(dict):
# Same stuff here.
基本上,这些 mixin 中的每一个都只是用其他作为参数传递给 __call__
的 mixin 来“更新”自己。这些类只是添加了一些语法糖。