0
클래스 Bot
에서 상속 한 플러그인이 가져 오기시 자동으로 등록되는 간단한 동적 플러그인 시스템을 만들려고합니다.이 메타 클래스 기반 TypeError는 어떻게 수정합니까?
아래 코드는 지금까지입니다. 나는 this 짧은 논문에서 일하고 있음을 유의하십시오. 위의 코드를 가져 오는 경우
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 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'
내가 잘못했을 무엇
?
실제로 당신은 정확하다. 나는 어리 석다. 최대한 빨리 받아 들일 것입니다! – blz