问题标签 [abc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
142 浏览

python - 我可以将一个类取消注册为“迭代器”吗?

我收到了一个错误地继承了抽象基类的类的代码collections.Iterator。它不遵循迭代器契约,这种有缺陷的继承关系会导致下游问题。有没有办法注销抽象基类?

注意:我知道这是一个奇怪的情况。请避免对 Monkey Patching 发表意见的冲动。

0 投票
1 回答
470 浏览

python - 是否有可能成为内置类型的虚拟子类?

是否可以使用户定义的类型成为python中内置类型的虚拟子类?我希望我的类被视为 的子类int,但是我想像这样直接继承:

从那时起,无论我是否愿意,我的课程实际上都是不可变的。例如,不可能使用像__iadd__and之类的方法,__isub__因为int无法修改自身。我可以从 继承numbers.Integral,但是当有人打电话isinstance(myIntObj, int)issubclass(MyInt, int)回答时False。我知道具有 ABCMeta 元类的类可以使用该方法register将类注册为虚拟基类,而这些虚拟基类并不真正从它们继承。有没有办法用内置类型来做到这一点?就像是:

我环顾四周(在 python 文档中和一般在线),还没有找到任何接近我正在寻找的东西。我所要求的完全不可能吗?

0 投票
1 回答
827 浏览

python - 如何在 python 2.6 到 3.5 中编写带有具体初始化程序的 Python ABC?

上下文

我有一个具有相对复杂的类层次结构的 python 应用程序。它需要与 python 2.6 到 python 3.5 一起工作(范围很大,我知道!),而且我在 ABC 方面遇到了特别的问题。我正在使用six图书馆with_metaclass来减轻一些伤害,但这仍然是个问题。

一组特定的课程给我带来了麻烦。以下是它的简化形式:

gamma捆绑了很多类似的函数MyABC,以及一些特定于子类的函数,例如alphabeta。我希望所有的子类都MyABC继承相同的__init__gamma属性,然后堆放在自己的特定特征上。

问题

问题是,为了MyChild1MyChild2共享代码__init__MyABC需要有一个具体的初始化程序。在 Python 3 中,一切正常,但在 Python 2 中,当初始化程序具体时,我无法TypeErrors在实例化MyABC.

我的测试套件中有一个部分看起来像这样

不知何故,在 Python 2.7(我假设是 2.6,但没有费心检查)这个测试失败了。

MyABC没有任何其他抽象属性,但是实例化一个没有 or 的类是没有gamma意义alphabeta。目前,我只是通过复制and中的__init__函数来解决 DRY 违规问题,但随着时间的推移,这变得越来越繁重。MyChild1MyChild2

如何在不使其可实例化的情况下为 Python 2 ABC 提供具体的初始化程序,同时保持 Python 3 的兼容性?换句话说,我想尝试在 Python 2 和 Python 3 中实例化MyABCthrow TypeErrors,但它只在 Python 3 中抛出它们。

with_metaclass

我相信在这里查看代码是相关的with_metaclass。这是根据six项目的现有许可和版权提供的,(c) 2010-2014 Bejamin Peterson

0 投票
1 回答
562 浏览

python - pylint 和 abc - 抽象方法

我想明确指出,该derived_config属性对于 Human 的派生类是必需的,而抽象属性装饰器可以解决问题,因为派生类未设置此属性的代码将不会运行。

但是 pylint 失败并出现以下错误:

注意:

  • pylint不会抱怨 abstract property implementation_config,但模式是相同的(除了那OneHandedClown是一个终端叶)。
  • 如果我删除类变量 implementation_config ,pylint确实会抱怨OneHandedClown

如何确保 lint 在不使用pylint-disable的情况下通过,同时使用抽象属性来确保继承合同是明确的?

0 投票
1 回答
305 浏览

python - 为什么我能够在 Python 中实例化我的抽象基类?

据我了解,我可以使用 Python 中的abc模块来创建无法实例化的抽象类(以及其他不错的属性)。我尝试使用它来创建Exception类层次结构来表示我的应用程序的各种退出代码,但我仍然能够实例化我的基类,即使我不希望这种情况发生。这是一些演示问题的代码:

我期待我的程序退出并出现ExitCodeException无法实例化的异常,但我只是得到了我期望的标准堆栈跟踪,如果ExitCodeException不是抽象的:

我怎样才能解决这个问题?

0 投票
1 回答
777 浏览

python - 覆盖继承类中抽象类的装饰器

所以这就是我所拥有的:

抽象类:

继承类:

本质上,我有一堆通用数据方法(在 DataWrapper 中定义),它们被各种类使用。我允许定义装饰器以在返回之前对数据执行任何前/后处理,这在 DataWrapper 中定义为占位符。

不幸的是,当我尝试在继承的类中定义装饰器时,它并没有被覆盖;即“这里”没有被打印。

我看到了这个并尝试在继承的类中添加覆盖装饰器,虽然没有错误,'here' 仍然没有被打印出来。

有人有什么建议吗?

0 投票
1 回答
385 浏览

python - 在 python 2.7 中,类属性被认为是抽象方法 - abc 模块

我正在尝试使用抽象方法(addfeature)实现一个抽象超类(Base),子类将覆盖该方法。

但是此代码失败了

“TypeError:无法使用抽象方法 em 实例化抽象类 Child”

为什么?em 应该是类属性,而不是方法(当然也不是抽象方法)

0 投票
0 回答
139 浏览

python - 从python中的抽象类方法调用子类方法(重写的抽象类方法)

我想从抽象类方法中调用被覆盖的抽象类方法(子类方法),但是遇到了几个错误。请问你能帮帮我吗?我的概念:

好吧,我想在类和实例上都称它为:

因此,它将使用覆盖 BaseClass 方法的子类方法 B.basic_format。

调用在子类 B 中实现并从 B 引用的 format_01 方法可以正常工作:

我认为这个问题可以参考,baseClass中引用了basic_format。但是如何绕过呢?

0 投票
1 回答
445 浏览

python - 如何将 abc.abstractproperty 与 classmethod 结合起来制作“抽象类属性”?

我想创建一个在抽象基类中声明的“类属性”,然后在具体实现类中被覆盖,同时保持实现必须覆盖抽象基类的类属性的可爱断言。

尽管我看了一下这个问题,但我天真地尝试重新利用已接受的答案并没有奏效:

我对我应该做什么有点迷茫。有什么帮助吗?

0 投票
1 回答
1686 浏览

python - Python 抽象基类:为什么 abc 不阻止实例化?

据我了解,Python模块 abc 应该防止实例化未@abstractmethod实现基类的所有标记方法的类(前提是基类已__metaclass__ = ABCMeta设置)

但是,这似乎不适用于以下代码:

抽象基类:

子类缺少方法:

子类可以在(相当粗略的)测试代码中实例化。为什么呢?

我正在使用 Python 2.7。