动态多重继承或混合

问题描述

我想了解如何在我的程序中实现多重继承或 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 来“更新”自己。这些类只是添加了一些语法糖。