问题标签 [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.
python - 我可以将一个类取消注册为“迭代器”吗?
我收到了一个错误地继承了抽象基类的类的代码collections.Iterator
。它不遵循迭代器契约,这种有缺陷的继承关系会导致下游问题。有没有办法注销抽象基类?
注意:我知道这是一个奇怪的情况。请避免对 Monkey Patching 发表意见的冲动。
python - 是否有可能成为内置类型的虚拟子类?
是否可以使用户定义的类型成为python中内置类型的虚拟子类?我希望我的类被视为 的子类int
,但是我不想像这样直接继承:
从那时起,无论我是否愿意,我的课程实际上都是不可变的。例如,不可能使用像__iadd__
and之类的方法,__isub__
因为int
无法修改自身。我可以从 继承numbers.Integral
,但是当有人打电话isinstance(myIntObj, int)
或issubclass(MyInt, int)
回答时False
。我知道具有 ABCMeta 元类的类可以使用该方法register
将类注册为虚拟基类,而这些虚拟基类并不真正从它们继承。有没有办法用内置类型来做到这一点?就像是:
我环顾四周(在 python 文档中和一般在线),还没有找到任何接近我正在寻找的东西。我所要求的完全不可能吗?
python - 如何在 python 2.6 到 3.5 中编写带有具体初始化程序的 Python ABC?
上下文
我有一个具有相对复杂的类层次结构的 python 应用程序。它需要与 python 2.6 到 python 3.5 一起工作(范围很大,我知道!),而且我在 ABC 方面遇到了特别的问题。我正在使用six
图书馆with_metaclass
来减轻一些伤害,但这仍然是个问题。
一组特定的课程给我带来了麻烦。以下是它的简化形式:
gamma
捆绑了很多类似的函数MyABC
,以及一些特定于子类的函数,例如alpha
和beta
。我希望所有的子类都MyABC
继承相同的__init__
和gamma
属性,然后堆放在自己的特定特征上。
问题
问题是,为了MyChild1
和MyChild2
共享代码__init__
,MyABC
需要有一个具体的初始化程序。在 Python 3 中,一切正常,但在 Python 2 中,当初始化程序具体时,我无法TypeErrors
在实例化MyABC
.
我的测试套件中有一个部分看起来像这样
不知何故,在 Python 2.7(我假设是 2.6,但没有费心检查)这个测试失败了。
MyABC
没有任何其他抽象属性,但是实例化一个没有 or 的类是没有gamma
意义alpha
的beta
。目前,我只是通过复制and中的__init__
函数来解决 DRY 违规问题,但随着时间的推移,这变得越来越繁重。MyChild1
MyChild2
如何在不使其可实例化的情况下为 Python 2 ABC 提供具体的初始化程序,同时保持 Python 3 的兼容性?换句话说,我想尝试在 Python 2 和 Python 3 中实例化MyABC
throw TypeError
s,但它只在 Python 3 中抛出它们。
with_metaclass
我相信在这里查看代码是相关的with_metaclass
。这是根据six
项目的现有许可和版权提供的,(c) 2010-2014 Bejamin Peterson
python - pylint 和 abc - 抽象方法
我想明确指出,该derived_config
属性对于 Human 的派生类是必需的,而抽象属性装饰器可以解决问题,因为派生类未设置此属性的代码将不会运行。
但是 pylint 失败并出现以下错误:
注意:
- pylint不会抱怨 abstract property
implementation_config
,但模式是相同的(除了那OneHandedClown
是一个终端叶)。 - 如果我删除类变量 implementation_config ,pylint确实会抱怨
OneHandedClown
如何确保 lint 在不使用pylint-disable
的情况下通过,同时使用抽象属性来确保继承合同是明确的?
python - 为什么我能够在 Python 中实例化我的抽象基类?
据我了解,我可以使用 Python 中的abc模块来创建无法实例化的抽象类(以及其他不错的属性)。我尝试使用它来创建Exception
类层次结构来表示我的应用程序的各种退出代码,但我仍然能够实例化我的基类,即使我不希望这种情况发生。这是一些演示问题的代码:
我期待我的程序退出并出现ExitCodeException
无法实例化的异常,但我只是得到了我期望的标准堆栈跟踪,如果ExitCodeException
不是抽象的:
我怎样才能解决这个问题?
python - 覆盖继承类中抽象类的装饰器
所以这就是我所拥有的:
抽象类:
继承类:
本质上,我有一堆通用数据方法(在 DataWrapper 中定义),它们被各种类使用。我允许定义装饰器以在返回之前对数据执行任何前/后处理,这在 DataWrapper 中定义为占位符。
不幸的是,当我尝试在继承的类中定义装饰器时,它并没有被覆盖;即“这里”没有被打印。
我看到了这个并尝试在继承的类中添加覆盖装饰器,虽然没有错误,'here' 仍然没有被打印出来。
有人有什么建议吗?
python - 在 python 2.7 中,类属性被认为是抽象方法 - abc 模块
我正在尝试使用抽象方法(addfeature)实现一个抽象超类(Base),子类将覆盖该方法。
但是此代码失败了
“TypeError:无法使用抽象方法 em 实例化抽象类 Child”
为什么?em 应该是类属性,而不是方法(当然也不是抽象方法)
python - 从python中的抽象类方法调用子类方法(重写的抽象类方法)
我想从抽象类方法中调用被覆盖的抽象类方法(子类方法),但是遇到了几个错误。请问你能帮帮我吗?我的概念:
好吧,我想在类和实例上都称它为:
因此,它将使用覆盖 BaseClass 方法的子类方法 B.basic_format。
调用在子类 B 中实现并从 B 引用的 format_01 方法可以正常工作:
我认为这个问题可以参考,baseClass中引用了basic_format。但是如何绕过呢?
python - 如何将 abc.abstractproperty 与 classmethod 结合起来制作“抽象类属性”?
我想创建一个在抽象基类中声明的“类属性”,然后在具体实现类中被覆盖,同时保持实现必须覆盖抽象基类的类属性的可爱断言。
尽管我看了一下这个问题,但我天真地尝试重新利用已接受的答案并没有奏效:
我对我应该做什么有点迷茫。有什么帮助吗?
python - Python 抽象基类:为什么 abc 不阻止实例化?
据我了解,Python模块 abc 应该防止实例化未@abstractmethod
实现基类的所有标记方法的类(前提是基类已__metaclass__ = ABCMeta
设置)
但是,这似乎不适用于以下代码:
抽象基类:
子类缺少方法:
子类可以在(相当粗略的)测试代码中实例化。为什么呢?
我正在使用 Python 2.7。