问题标签 [abstract-base-class]

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 回答
1686 浏览

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

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

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

抽象基类:

子类缺少方法:

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

我正在使用 Python 2.7。

0 投票
2 回答
65 浏览

c++ - 抽象类和基类一样吗?

抽象类和基类一样吗?

我偶尔会看到术语基类,但当我查找它的含义时,我倾向于看到“抽象类”。

它们只是两个意思基本相同的词吗?

0 投票
1 回答
137 浏览

c++ - C++ 设计问题:具有各种抽象基类的映射

我正面临设计问题,可以通过一些外部输入来解决。我试图避免抽象基类转换(因为我听说这很糟糕)。

问题归结于这种结构:

最初我以为我会逃脱:

并且...我做到了,但这会给我带来问题,因为我需要专门从敌对或友好的角度访问“独特”功能。

我已经不光彩地尝试过(工作但不喜欢它也不觉得安全):

我希望/试图维护用作基本抽象类类型的键的unordered_map设计......无论如何,非常感谢输入。FactionType

如果有任何语法错误,我深表歉意。

0 投票
0 回答
84 浏览

python-3.x - 调用抽象基类构造函数

该库有一类神经网络。如果我创建一个网络 - 一切正常,但当我创建两个或更多网络时 - 其中一个停止学习。经过几个小时的错误搜索后,我发现如果我在初始化后调用基本构造函数 - 所有网络都学得很好。

如果代码看起来像

网络不学习。您可以在这里找到所有来源 -

https://sourceforge.net/p/meta-net-project/code/HEAD/tree/metanet/networks/artificial_networks/feedforward_network.py

我究竟做错了什么?

0 投票
1 回答
645 浏览

python - 为什么 __slots__ 从抽象基类继承时在 Python 2 和 3 中的行为不同

我创建了以下类,以一种内存有效的方式存储平面上的可变点 - 我需要一个可变的namedtuple('Point', 'x y'). 由于实例字典很大,我想我会去__slots__

在 Python 3 上对其进行测试时,一切似乎都很好:

但是在 Python 2 上,z即使它不在插槽中,我也可以设置属性:

为什么会这样,为什么 Python 2 和 Python 3 之间存在差异?

0 投票
1 回答
1479 浏览

python - 在 Python 中,如何知道对象是否可以进行比较?

借助抽象基类,Python 提供了一种无需实际尝试即可了解对象行为的方法。在标准库中,我们在collections.abc中为容器定义了一些 ABC 。例如,可以测试一个参数是否可迭代:

我希望有一个这样的 ABC 来决定是否可以比较一个类的实例,但找不到。测试__lt__方法的存在是不够的。例如,字典无法比较,但__lt__仍被定义(与object实际相同)。

所以我的问题是:有没有一种简单的方法可以做到这一点,而无需自己进行比较并捕获TypeError?

我的用例类似于排序容器:我想在插入第一个元素时引发异常,而不是等待第二个元素。我考虑过将元素与自身进行比较,但有没有更好的方法:

0 投票
1 回答
582 浏览

python - Python 2.7——从实例调用抽象基类的方法

我正在寻找从注册为 ABC 的子类的类的实例中调用抽象基类方法的正确方法。这是一些非常基本的测试代码,首先要弄清楚如何使其工作。这是我目前所在的位置:

虽然这种方法似乎过于复杂地改变了两个 Dog 方法,但我希望能够灵活地将行为分配给未知数量的实例。我希望能够在实例不知道实际行为的情况下调用 speak() 和 move()。我也喜欢这种方法,因为我也能够轻松删除或更改注册类的行为,而无需更改任何现有代码。

当前代码读取的方式 nora.speak() 和 nora.move() 调用从 Dog 到 Beagle 的继承方法,其中只包含 pass。

如果有人对我需要做什么以使注册行为的方法可调用有任何见解,或者我的方法是否完全有缺陷,我将不胜感激。

0 投票
2 回答
134 浏览

python-2.7 - 测试 Python 代码是否只使用 ABC 方法

假设我有一个记录为采用collections.SequenceABC的函数。如何针对 ABC 接口测试此函数中的代码?我是否可以编写一个单元测试(或多个测试)来确认我的代码仅调用此 ABC 定义的方法,而不是例如由 ABC 定义的方法list或其他具体实现collections.Sequence?或者是否有其他工具或方法来验证这一点?

0 投票
1 回答
5515 浏览

python - 初始化派生自和抽象类的类时出现python错误

我有这个简单的代码,我得到一个奇怪的错误:

我究竟做错了什么?理论上的解释将不胜感激。

0 投票
1 回答
41 浏览

django - 用于处理不同业务级别的相似/相同对象的数据库结构

设想

一家著名的 taco 机构想要构建一个 Django 应用程序,其中包含ComboComboItemIngredientOrder.

  1. 总部想要创建包含项目的各种组合,并布置原始项目成分和价格。
  2. 然后,每个特许经营商可以选择他们将在他们的菜单上销售的组合,并允许调整他们商店的组合项目的价格和成分。
  3. 当收到订单时,组合和项目详细信息应显示在日志上,并且如果总部重命名组合或特许经营更改价格/成分,则将来不应更改。

用例

  1. HQ 创建了“Hot Taco Combo”。它具有三个相关的组合项目

    • 一个炸玉米饼(价格:0.99 美元,配料:贝壳、牛肉、奶酪、辣酱)
    • 油条螺旋(价格:0.79 美元)
    • 饮料(价格:1.29 美元)
  2. 纽约特许经营店将 Hot Taco Combo 添加到他们的菜单中。他们将炸玉米饼的价格调整为 1.49 美元,并在炸玉米饼中加入生菜。

  3. 一位顾客订购了玉米卷上没有奶酪的组合。

  4. HQ 将组合的名称更改为 Fiery Taco Combo - 纽约的组合名称更新,但 taco 保持相同的定制价格,仍然包括生菜。

  5. NY 特许经营店的一位经理查看了所有订单,并看到了Hot Taco Combo的一份订单,而炸玉米饼的原料只有壳、肉和生菜。

问题

我正在努力确定处理此问题的最佳方法,因为 aCombo在所有三个级别上基本上是相同的对象,但其相关ComboItem对象可能不同。HQ 应该能够更新 Combo 属性,例如名称,它会更新所有特许经营组合名称,但组合项目自定义应该保留。此外,为了准确的订单记录,销售点的组合细节和定制一旦记录就不应更改。

最初我想AbstractBaseClass在每个业务级别上为每个相关模型和从它们继承的对象都有一个,但这种结构感觉冗余且难以维护。

然后我想使用GenericForeignKey将组合与总部、特许经营权或订单相关联,并在必要时复制对象,因为它们向下移动。这感觉很奇怪并且容易出错。

有没有人处理过这样的案例或有什么建议?这只是一个复杂的问题并需要一个复杂的解决方案,还是我缺少一种简单的方法?先感谢您。