如何实现插件?

时间:2014-05-20 03:01:48

标签: python plugins

以下是我想做的例子

我有双门车,巴士,范不同的车辆,但他们是继承车辆'。我想要做的是创建一个基类(' Vehicle'),这样每个人都需要关注。然后人们可以建立自己的插件(例如Bus,Van)。

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

my_vehicle = Vehicle('bus')

然后将使用公共汽车类。

我明白了,但我不知道应该如何实施呢?

提前致谢

2 个答案:

答案 0 :(得分:1)

您可以使用元类:

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'>

这可以通过让类继承进程在元类中注册该类,然后覆盖调用Vehicle的行为,以便它动态调度到适当的类。

答案 1 :(得分:0)

另一种选择是使用现有的插件库,例如stevedore

这会给你:

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