当前位置: 首页 > 知识库问答 >
问题:

能够实例化python类,尽管它是抽象的(使用abc)

柳珂
2023-03-14

这个问题的答案是“使用python的abc模块创建抽象类”。(作者@AlexVassel,并被接受为答案)。

我尝试了这些建议,但奇怪的是,尽管遵循了使用abc方式的建议,但它对我不起作用。因此,我把它作为一个问题贴在这里:

from abc import ABCMeta, abstractmethod

class Abstract(object):
    __metaclass__ = ABCMeta

    @abstractmethod
    def foo(self):
        print("tst")

a = Abstract()
a.foo()
pydev debugger: starting (pid: 20388)
tst
>>> TypeError: Can not instantiate abstract class Abstract with abstract methods foo

那么我做的对还是错呢?为什么工作而不失败?欣赏任何专家对此的洞察力。

共有1个答案

狄阳华
2023-03-14

在Python 3中,在创建抽象基类时使用元类参数:

from abc import ABCMeta, abstractmethod

class Abstract(metaclass=ABCMeta):

    @abstractmethod
    def foo(self):
        print("tst")

a = Abstract()
a.foo()
 类似资料:
  • 所以我有两个类。一个只有纯粹的虚拟函数。另一个实现了这些函数,并从第一个类派生出来。我知道我不能实例化第一个类。但是当我试图创建第二个类的对象时,它也失败了。 我的第二节课大体上是这样的: 执行: 下面是我如何实例化它并得到错误: 我哪里做错了? 第一课

  • 我查过了,发现最接近的是这个,除了我没有任何向前的声明。我在基类中只有一个纯虚函数,我在子类中实现它,如下所示: 命令H 命令cpp 数字H 数字cpp 发生文件错误: 一个dd.cpp 添加H

  • 我正在尝试实现上面提到的解决方案,但是在这里,我得到了一个错误“RowMapper是抽象的,不能实例化”和“表达式的非法开始”。下面正是我所说的

  • 问题内容: 我创建了一个空的抽象类,并从中继承了该类: 我期望输出是 但是,我得到的是 如果我删除(这样就变成一个普通的类)和/或如果我设置了其他值,问题(显然)就消失了。 这里发生了什么? 问题答案: 这实际上不是ABC的问题,而是PyMongo的问题。有一个关于它的问题在这里。似乎pymongo重写以返回某种数据库类。这意味着将返回一个数据库对象,该对象在布尔上下文中为true。这使ABCMe

  • 我有一个抽象类及其具体子类,当我创建子类的对象时,它会自动调用超级构造函数。JVM是否在内部创建抽象类的对象? 那么在JVM中没有对象的情况下构造函数是如何存在的??(对于抽象类) 同样,构造函数在创建对象之后执行,然后不创建抽象类的对象,默认构造函数是如何执行的??(这在Java文档中有所提及)

  • 本文向大家介绍python抽象基类用法实例分析,包括了python抽象基类用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python抽象基类用法。分享给大家供大家参考。具体如下: 定义抽象类,需要使用abc模块,该模块定义了一个元类(ABCMeata),和装饰器 @abstractmethod, @abstractproperty 如果要实例化继承了Foo 的子类,子类必须实