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

python-3.x - 获取 ABCMeta 的所有已注册子类

我有一个类似于以下的目录结构:

model.py包含一个抽象基类:

文件夹中models是这个基类的两个实现,model_a.pymodel_b.py,它们将自己注册到主Base类。 model_a.py看起来像这样:

并且model_b.py是相似的。

现在,我要做的main.py是创建一个包含所有子类的字典,Base以便我可以选择一个(通过我的程序的 GUI)并运行它:

但我无法让它工作。RuntimeError: Refusing to create an inheritance cycle当我尝试执行派生类之一并且字典main.py为空时,我得到了。

0 投票
1 回答
294 浏览

c++ - C++ - 打印矢量派生类对象的元素

我有一个名为的抽象类Pet和三个派生类Cat Dog Goldfish。我正在尝试将它们存储在矢量中并打印宠物名称。但我得到了一些十六进制数。我不知道我在哪里做错了。

List.hpp 文件

这是主要功能

0 投票
1 回答
77 浏览

python - 多重继承依赖 - Base 需要 AbstractBaseClass

问题的要点:如果继承多个类,我怎么能保证如果一个类被继承,子对象也使用一个恭维抽象基类(abc)。

我一直在搞乱pythons继承,试图看看我能做什么很酷的事情,我想出了这个模式,这很有趣。

我一直在尝试使用它来更轻松地实现和测试与我的缓存交互的对象。我有三个模块:

  • ICachable.py
  • 可缓存的.py
  • 一些类.py

ICacheable.py

可缓存的.py

一些类.py

所以这个例子有效,但可怕的是没有保证继承的类Cacheable也继承ICacheable。这似乎是一个设计缺陷,因为Cacheable它本身没有用。然而,从我的子类/子类中抽象事物的能力是强大的。有没有办法保证 Cacheable 对 ICacheable 的依赖?

0 投票
2 回答
80 浏览

c++ - 命名参数习语和(抽象)基类

假设我正在用 C++11 编写一个 3D 渲染器,我在其中创建材质并将它们分配给模型。

我希望能够使用命名参数成语创建材质,如下所示:

然后我可以创建一个这样的模型:

我还希望能够将材料作为 r 值传递:

在这个简单的用例中,我可以这样编写我的Model类:

问题

我想创建Material一个抽象基类,以便可以为特定种类的材料创建自定义实现。这意味着在我的Model我必须存储一个指向材料的指针(甚至是引用)。但后来我不能再将材料作为 r 值传递。

我可以选择使用std::shared_ptr<Material>成员变量,但是使用命名参数习语变得更加困难,因为在这种情况下我将如何构造材料?

你们中有人对我有什么好的建议吗?

更详细的示例代码

0 投票
1 回答
299 浏览

c++ - C++ 实现抽象类

我正在尝试编写一个名为 TerminalPlayer 的派生类,它在给定虚拟 const Card playCard(const Card contrastCard) = 0; 的声明的情况下继承一个 Player 类 您将如何在抽象类中实现继承的 playCard 以及原型末尾的 = 0 是什么意思?

我在主要测试代码中也有错误,它给出了错误:无法分配抽象类型“播放器”的对象。我认为这是因为我没有正确实现 Player 类,但我不知道如何修复它。

播放器.h

终端播放器.h

终端播放器.cpp

测试.cpp

0 投票
2 回答
115 浏览

c# - 我不明白为什么在基类中测试可能的接口是错误的

我有一个抽象基类,它将用于数百个派生类,包括一个额外的抽象类。

至少有 2 个属性(我们称它们为目的和描述,都是字符串)将添加到许多(但不是全部)具体派生类中,因此我创建了接口(IPurposeful 和 IDescribable)以在需要时添加它们。到目前为止一切都很好。

我想要一个方法,我可以调用从我的基类派生的所有类,如果它确实是 IDescribable,它将验证和更新 Description 属性,或者如果它不是 IDescribable,则只返回 true。我想要另一种类似的方法来验证/更新目的属性。

我通过基类中的一个方法实现了这一点,它看起来像这样:

SonarQube 将“这是 IDescribable”检查标记为阻止程序(不好的做法),我想知道为什么?我能想到的复制此功能的唯一其他方法是将基本方法更改为:

然后将这个完全相同的方法添加到可能的数百个派生类中:

现在这似乎是不好的做法。

编辑:更改了 is/as 模式以消除冗余

0 投票
0 回答
64 浏览

c++ - C++:对 ABC 的子类强制执行单例

在已经存在的模拟框架中,我试图在已经存在的模型抽象基类上实现状态模式。由于模型类只是一个 ABC,因此状态也应该是。我正在寻找一种方法来对州 ABC 的所有可能的子类强制执行单例模式。

这是我到目前为止所尝试的:

这是我所在州的ABC:

上下文类采用相同的三个模板参数,因为它需要知道其状态的类型。并且一个新的类模板最终继承自 Context 和所用模型的 ABC。

我现在尝试为在模拟中使用的具体状态创建一个基类,方法如下(需要这个基类,以便所有 Context 具有相同的类型):

现在我遇到两个问题:

1)显然状态库的每个孩子的getInstance()方法只会产生一个状态库

2)如果我不使用 statebase 类型作为模板参数,而是使用具体类型,则 Context 将不匹配(例如,带有参数 StateIdle 的 Context 显然与带有参数 StateProducing 的 Context 类型不同)

所以我的问题是:有没有办法强制所有未来的 State 子类成为 Singleton?或者在 C++ 中这种方式是不可能的?

PS:如果您的回答是 Sigletons 是一种反模式/不良设计等,或者我应该使用 boost:请不要。谢谢。

0 投票
0 回答
60 浏览

c# - 基类操作中的属性路由继承了 Controller MVC C#

我正在使用以下结构,其中我使用以下基类结构来实现视图。

www.localhost.com/Entity1 的网页给出了索引视图的结果[应该是],但是当我尝试使用属性路由搜索 url 时,例如。www.localhost.com/Entity1/Addor www.localhost.com/Entity1/Edit/1or www.localhost.com/Entity1/GetAlland so 其他方法,它们不会省略任何结果。

如果我在我的地址中使用约定路由 [而不是www.localhost.com/Entity1/Add使用www.localhost.com/Entity1/AddorEditEntity],此应用程序会呈现视图并显示 Web 结果。

如果我直接从 Controller 定义相同的方法,即使用继承 Controller 直接到Entity1Controller[for ex. public class Entity1Controller : Controller,而不是上面显示的基本继承模型],属性路由工作文件顺利。

我试图用谷歌搜索它,并且知道了,DefaultDirectRouteProvider但这仅适用于ApiController. 我想在 MVC 应用程序中使用相同的 [ie Controller]。这样当我通过以下地址访问 AddorEditEntity 方法时,www.localhost.com/Entity1/Add它应该呈现视图。

请告知这是否可能。

0 投票
2 回答
124 浏览

c# - 抽象类构造函数调用可重写方法

我尝试创建一个良好的可测试存储库类以与 Moq 一起使用。我不想重复我的选择器方法(GetAll, Get, ...)。我的实现工作正常,但 SonarSource 报告错误RSPEC-1699有人知道更好的实现吗?

基类

我的区域存储库

0 投票
2 回答
44 浏览

python - 在抽象基 int 类中使用“__and__”方法

我试图了解__and__抽象基 int 类的方法。在这里,我以两种不同的方式调用了该方法。在几乎所有情况下,这两种方式的行为都符合我的预期,它们输出第二个值,因为这两个值都是“真实的”。但是在两个数字之和 = -1 的特殊情况下,第一种方式打印 0。谁能说出为什么?