如何创建python插件?

如何创建python插件?,python,plugins,Python,Plugins,下面是我想做的例子 我有不同的双门车、公共汽车、厢式货车,但它们是从“车辆”继承而来的。我想做的是创建一个基类(“Vehicle”),这样每个人都需要遵循。然后人们可以构建自己的插件(例如,总线、货车) 然后其他用户会像这样使用插件 my_vehicle = Vehicle('bus') 然后将使用总线类 我有这个想法,但我不知道应该如何实施 提前感谢您可以为此使用元类: class VehicleType(type): registry = {} def __init__(

下面是我想做的例子

我有不同的双门车、公共汽车、厢式货车,但它们是从“车辆”继承而来的。我想做的是创建一个基类(“Vehicle”),这样每个人都需要遵循。然后人们可以构建自己的插件(例如,总线、货车)

然后其他用户会像这样使用插件

my_vehicle = Vehicle('bus')
然后将使用总线类

我有这个想法,但我不知道应该如何实施


提前感谢

您可以为此使用元类:

class VehicleType(type):
    registry = {}

    def __init__(self, name, bases, attrs):
        self.registry[name.lower()] = self

    def __call__(self, name):
        cls = self.registry[name]
        inst = cls.__new__(cls)
        inst.__init__()
        return inst


class Vehicle(object):
    __metaclass__ = VehicleType


class Car(Vehicle):
    pass


car = Vehicle("car")
print(type(car))  # <class '__main__.Car'>
等级车辆类型(类型):
注册表={}
定义初始值(自身、名称、基数、属性):
self.registry[name.lower()]=self
定义调用(self,name):
cls=self.registry[名称]
inst=cls.\uuuu新\uuuuuu(cls)
仪器初始化()
返回仪表
类别车辆(对象):
__元类\车辆类型
车辆类别:
通过
汽车=汽车(“汽车”)
打印(类型(汽车))#

这是通过让类继承过程在元类中注册类,然后重写调用
Vehicle
的行为,以便它动态地分派到适当的类来实现的。

另一个选项是使用已经存在的插件库,例如

这将为您提供:

  • 创建插件的简明方法
  • 动态加载它们的几种方法

谢谢,我想我需要一个元类。让我就这个话题多研究一下。