Python 如何修复此元类承载的类型错误?

Python 如何修复此元类承载的类型错误?,python,plugins,typeerror,metaclass,Python,Plugins,Typeerror,Metaclass,我正在尝试创建一个简单的动态插件系统,其中从类Bot继承的插件在导入时自动注册 下面是到目前为止我的代码。请注意,我是从短文工作 import os.path as osp from glob import glob from imp import load_source from twisted.internet import reactor run = reactor.run halt = reactor.stop class Reactor(object): _bot_re

我正在尝试创建一个简单的动态插件系统,其中从类
Bot
继承的插件在导入时自动注册

下面是到目前为止我的代码。请注意,我是从短文工作

import os.path as osp
from glob import glob
from imp import load_source

from twisted.internet import reactor

run = reactor.run
halt = reactor.stop


class Reactor(object):
    _bot_registry = {}

    def __init__(self, botdir):
        map(load_source, *enumerate(glob(osp.join(botdir, '../bots/*.py'))))
        self.bots = {k: v() for k, v in self._bot_registry.iteritems()}


class Bot(object):
    """Base class for Bots"""
    class __metaclass__(type):
        def __init__(cls, name, bases, dict):
            type.__init__(name, bases, dict)
            Reactor._bot_registry[name] = cls

    def _update(self):
        """Run through one scrape/process/respond iteration."""
        pass

    def scrape(self):
        pass

    def process(self):
        pass

    def publish(self):
        pass
导入上述代码时,我得到一个TypeError,如下所示:

TypeError                                 Traceback (most recent call last) <ipython-input-42-dc3963f5e69b> in <module>()
     19 
     20 
---> 21 class Bot(object):
     22     """Base class for Knacki Bots"""
     23     class __metaclass__(type):

<ipython-input-42-dc3963f5e69b> in __init__(cls, name, bases, dict)
     23     class __metaclass__(type):
     24         def __init__(cls, name, bases, dict):
---> 25             type.__init__(name, bases, dict)
     26             Reactor._bot_registry[name] = cls
     27 

TypeError: Error when calling the metaclass bases
    descriptor '__init__' requires a 'type' object but received a 'str'
() 19 20 --->21类机器人(对象): 22“Knacki机器人程序的基类” 23类\元类\类型: in_uuuinit_uuuuu(cls、名称、基数、dict) 23类\元类\类型: 24定义初始值(cls、名称、基数、dict): --->25类型。初始化(名称、基、指令) 26反应堆_bot_注册表[名称]=cls 27 TypeError:调用元类基时出错 描述符“\uuuu init\uuuuuu”需要一个“type”对象,但收到一个“str”
我做错了什么?

type.\uuuu init\uuuuu
与您的
元类具有相同的调用签名。\uuuuu init\uuuuu
。第一个参数应该是
cls

type.__init__(cls, name, bases, dict)
顺便说一句:不要给变量命名
dict
,因为它会隐藏相同名称的内置项。我建议

type.__init__(cls, name, bases, clsdict)