我正在写一个lib,由于一个奇怪的原因,我出现了这个错误。
- Here是我代码。当然 *@abc.abstractmethod必须取消注解 *
- 这是我的测试
- 抱歉不能复制粘贴 *
我是基于下面的代码工作。
第1001章:我的test.py:
import abc
import six
@six.add_metaclass(abc.ABCMeta)
class Base(object):
@abc.abstractmethod
def whatever(self,):
raise NotImplementedError
class SubClass(Base):
def __init__(self,):
super(Base, self).__init__()
self.whatever()
def whatever(self,):
print("whatever")
Python壳中:
>>> from test import *
>>> s = SubClass()
whatever
为什么我的 * 花名册 * 模块我有这个错误:
Can't instantiate abstract class Player with abstract methods _Base__json_builder, _Base__xml_builder
先谢谢你。
3条答案
按热度按时间2nbm6dog1#
你的问题是因为你在你的基础抽象类中定义了带有
__
(双下划线)前缀的抽象方法,这会导致python在定义类的时候进行名字修改。函数的名称从
__json_builder
更改为_Base__json_builder
,或者从__xml_builder
更改为_Base__xml_builder
,这是您必须在子类中实现/覆盖的名称。要在示例中显示此行为-
当我将实现更改为以下内容时,它可以正常工作
但是这是非常乏味的,你可能要考虑一下你是否真的想用
__
(双下划线)定义你的函数。u59ebvdq2#
要使它的行为与Python 2中一样,最简单的方法是使用
这将允许您的代码访问导入,代码中定义的类和函数将正常工作,等等。
此操作应仅使用您信任的代码执行。
t2a7ltrp3#
我得到了下面相同的错误:
TypeError:无法使用抽象方法声音示例化抽象类Animal
当我试图示例化**
Animal
抽象类**时,如下所示:而且,我得到了下面同样的错误:
TypeError:无法使用抽象方法声音示例化抽象类Cat
当我没有覆盖**
Cat
类中的sound()
抽象方法时,我示例化了Cat
类**,如下所示:因此,我重写了**
Cat
类中的sound()
抽象方法**,然后示例化了**Cat
类**,如下所示:然后,我可以解决这个错误: