问题标签 [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 回答
2410 浏览

python - 为什么 `__subclasshook__` 可以猴子补丁到元类上,但 `__instancecheck__` 不能?

这是一个尝试创建一个装饰器的玩具示例,该装饰器允许声明属性名称,这应该是标准__subclasshook____instancecheck__模式中“接口检查”的必需部分。

Foo当我装饰班级时,它似乎按预期工作。我创建了一个Bar与 无关的类Foo,但它具有所需的属性,并且正确满足isinstance(instance_of_bar, Foo) == True.

但是作为另一个例子,我创建了一个dictaugmented 的子类,这样这些key值也可以通过getattr语法访问(例如,可以用dictwhered['a']替换d.a以获得相同的结果)。在这种情况下,属性只是实例属性,所以__instancecheck__应该可以工作。

这是代码。请注意,鉴于带有实例的示例,将函数Bar“monkeypatch”到类(具有元类)中的选择可以正常工作。所以似乎不必直接在元类的类定义中定义函数。__subclasshook__Foo

印刷:

这只是一个玩具示例——我不是在寻找更好的方法来实现我的attrdict课程。该Bar示例演示了猴子补丁的__subclasshook__工作方式。其他两个示例演示了__instancecheck__仅具有要检查的实例属性的实例的失败。在那些情况下,__instancecheck__甚至没有调用。

我可以手动检查(即,根据需要)或__instancecheck__的实例是否满足我的函数的条件。attrdicthasattr(instance_of_attrdict, "x")Truez

同样,对于Bar. 这表明__subclasshook__装饰器正在正确应用,并且修补自定义__metaclass__不是问题。但是__instancecheck__在这个过程中似乎没有被调用。

为什么可以__subclasshook__在元类的类定义之外定义并在以后添加,但不能__instancecheck__

0 投票
1 回答
78 浏览

python - 是否可以使用抽象基类的字典的所有(或大部分)属性来制作 Python 字典?

我熟悉抽象基类 (ABC) 的概念,因为它提供了内置对象的属性集,但我没有任何使用它们的经验。我可以看到有一个MappingABC 和一个继承自它的 MutableMapping,但我没有看到.fromkeys()方法(我脑子里唯一缺少的东西。)

我能用纯 ABC 制作一个字典吗?那会是什么样子?这与子类化几乎相同dict吗?这样做有什么好处吗?用例是什么?

0 投票
5 回答
20407 浏览

python - 如何在 Python 中使用抽象基类实现 dict?

我尝试使用抽象基类 MutableMapping 在 Python 中实现映射,但在实例化时出现错误。我将如何使用Abstract Base Classesdict以尽可能多的方式制作这个字典的工作版本,以尽可能多地模拟内置类?

一个好的答案将演示如何使这项工作,特别是没有子类化dict我非常熟悉的概念)。

0 投票
2 回答
486 浏览

python - 如何在 Python 中使用抽象基类?

按照本教程,我正在尝试在 Python 中使用抽象基类。所以我构建了两个文件:

基础.py

implementation.py

运行python implementation.py工作正常,但我现在想implementation.py用作其他东西的模块。所以我进入命令行并执行:

我在这里做错了什么,我怎样才能做到这一点?欢迎所有提示!

0 投票
6 回答
18043 浏览

python - 如何检查 numpy dtype 是否是整数?

如何检查 numpy dtype 是否是整数?我试过:

但它给了False


更新:它现在给出True.

0 投票
1 回答
5220 浏览

python - Python中具有特定参数的抽象方法

我用 abc 包实现抽象类。下面的程序显示没有问题。

有什么办法让它失败,因为抽象MyMethod确实有一个参数a,但类中“MyMethod”的实现Derivative没有?所以我不仅要指定接口类中的方法,还要指定Base这些方法的参数。

0 投票
1 回答
230 浏览

python - 鸭类,ABC,继承,__new__

我正在编写一个使用数据源等的测试系统。运行的时候会读取一堆仪器,但是为了后端的测试和开发,我希望它读取一个文件,或者返回随机数。将来,我知道将需要创建新的数据源,其操作尚不清楚。我正在尝试设置系统,以便我可以转到一个新部门,而不必回来支持它,所以想要像 Pythonic 一样,尽可能少地留下惊喜。一个主要要求是对源有一个一致的 API,而 ABC 在这里似乎是显而易见的选择。源之间没有足够的共同点,无法在基类中继承任何有价值的块。

我不想要一个选择要做什么的大型源模块,我想要可以从中选择的小型独立源,因此可以单独使用旧的工作。问题是,我希望能够选择与参数一起使用的源,这样我就可以运行相同的测试脚本并轻松切换源。我完全忘记了我是如何遇到的__new__,但这并不明显,其他人也很少听说过。有用。但是,做我想做的事情是显而易见的还是 Pythonic 的方式?有没有一种我的同事更熟悉的方法?我应该指出,我现在的工作水平略高于我对元编程的舒适程度,所以任何更复杂的事情都可能会直接在我的脑海中呼啸而过。

0 投票
1 回答
4096 浏览

python - Python中的抽象方法继承

假设我们有一个 Python 类,它使用abc模块来定义一个抽象属性:

现在让我们考虑通过添加一个新方法 ( )来定义B子类,以及实现最初在 中声明的抽象方法的子类:Atest_method()CBA

假设我想保持B抽象(不可实例化),我应该重新定义抽象属性(test_attribute)和元类赋值B吗?A或者从(如上面的代码中)继承它们就足够了吗?

我知道 Python 允许我不重新定义抽象方法,从而从父类继承它们。从理论软件工程的角度来看,这是否正确?

我这样问是因为如果我没记错的话,其他语言(例如 Java)不允许继承抽象方法而不将它们重新实现为抽象...

0 投票
2 回答
1243 浏览

python - Python abc 模块:同时扩展抽象基类和异常派生类会导致令人惊讶的行为

扩展抽象基类和派生自“对象”的类可以按您的预期工作:如果您还没有实现所有抽象方法和属性,则会出现错误。

奇怪的是,用扩展“异常”的类替换对象派生类允许您创建不实现所有必需抽象方法和属性的类的实例。

例如:

...产量...

我知道“异常”因此“myCustomException”没有属性“foo”,那么为什么我要实例化“myCustomException”呢?

编辑:为了记录,这是我最终采用的骇人听闻的解决方法。不是真正等效的,但适用于我的目的。

0 投票
1 回答
450 浏览

python - Python与abstractmethod的不同行为

我有两个类从同一个父类继承P

唯一的区别是D继承自tuplePwhile仅C继承自P

现在这是行为:c = C()出现错误,如预期的那样:

d = D()工作没有错误!

我什至可以打电话d.foo()。我该如何解释这种行为?