python抽象类可以实例化吗_无法实例化抽象类。。。用抽象的方法

您的问题是因为您在基本抽象类中定义了前面带有__(双下划线)的抽象方法。这导致python在定义类时执行name mangling。

函数名从__json_builder更改为_Base__json_builder,或者从__xml_builder更改为_Base__xml_builder。这是您必须在子类中实现/覆盖的名称。

要在示例中显示此行为->>> 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")

...

>>> a = SubClass()

Traceback (most recent call last):

File "", line 1, in

TypeError: Can't instantiate abstract class SubClass with abstract methods _Base__whatever

当我将实现更改为以下内容时,它将工作>>> class SubClass(Base):

... def __init__(self):

... super(Base, self).__init__()

... self._Base__whatever()

... def _Base__whatever(self):

... print("whatever")

...

>>> a = SubClass()

whatever

但这是非常乏味的,如果您真的想用__(双下划线)定义函数,您可能需要考虑一下。您可以阅读有关名称损坏的更多信息here。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值