好像当我有一个继承自gevent.Greenlet的抽象基类(它继承自C扩展模块greenlet:https://github.com/python-greenlet/greenlet)时,实现它的类不会引发任何关于未实现方法的abc错误.
class ActorBase(gevent.Greenlet): __metaclass__ = abc.ABCMeta @abc.abstractmethod def foo(self): print "foo" class ActorBaseTest(ActorBase): def bar(self): print "bar" abt = ActorBaseTest() # no errors!
如果我从object
它继承失败按预期方式:
class ActorBase(object): __metaclass__ = abc.ABCMeta @abc.abstractmethod def foo(self): print "foo" class ActorBaseTest(ActorBase): def bar(self): print "bar" >>> abt = ActorBaseTest() Traceback (most recent call last): File "/home/dw/.virtualenvs/prj/local/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 2827, in run_code exec code_obj in self.user_global_ns, self.user_ns File "", line 1, in abt = ActorBaseTest() TypeError: Can't instantiate abstract class ActorBaseTest with abstract methods foo
实现此功能的正确方法是什么?