问题标签 [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 投票
2 回答
1710 浏览

php - 如何为我所有的 symfony 控制器创建基类

我想为我在 Symfony 中的所有控制器创建一个基本控制器类,我对 Symfony 很陌生,所以不要对愚蠢的问题生气。我问这个问题是因为我不能做这样的事情

现在我的控制器之一

做这个的最好方式是什么?请...编辑....我真正想做的是检查用户权限级别是否足以访问特定控制器(例如UserController)中的特定操作(例如deleteUserAction()),我有一个类将特权级别附加到所有控制器中的所有操作。UserController->deleteUserAction()如果检查发生在之前执行但在基本控制器中我无权访问 $this的父控制器(例如 BaseController 的构造函数)中,检查将非常有效。我已经尝试过选民和 ACL,但对我的情况没有帮助。提前致谢。

0 投票
1 回答
49 浏览

python - 使用 python 类作为工具包?

我不确定这样做的正确方法是什么,但我有以下代码:

我的目标是拥有某种抽象基类,我可以将其用作其他类的工具包。这个工具包类不应该是可实例化的。它应该具有抽象方法,但其他方法应该被继承,并且不应该在子类中实现,因为它们将在子类之间共享。以下代码正在运行。但是,我正在使用 Pycharm 并且“self.name”导致了这个警告:

类“工具包”的未解析属性引用“名称”

我想知道这样做的正确方法是什么。我已经研究了 ABC 元类,但由于两个原因无法使其按我的意图工作。首先,如果所有方法都不是抽象方法,则可以实例化一个抽象类;我只是想确保它根本不能被实例化。其次,我想要一些将用作默认值的方法(不需要像 printname 那样被覆盖),我似乎无法弄清楚如何实现这一点。

提前致谢!

编辑:

当我的意思是它有效时,我的意思是它正确打印“测试”。

0 投票
1 回答
1526 浏览

c++ - 使用抽象基类的 C++“调用纯虚方法”

我正在使用仅具有纯虚拟方法的抽象基类,以在 C++ 中具有接口行为(是的,我来自 Java)。就我所做的研究而言,这似乎是要走的路。

我必须抽象基类,GraphReader 和 Graph。

它们都有继承自 GraphReader/Graph 的派生类。

使用 read() 函数返回 Graph* 值,如下所示:

在我的主要工作中,我执行以下操作:

图的加载有效,但是当我在图上调用布局函数时,出现以下错误(在运行时,它会编译):

这个问题是否来自这样一个事实,即我返回 Graph 并且我不是直接在它像 GraphReader 那样将派生类分配给它的父类之前?我最困惑,因为它适用于 GraphReader,但不适用于 Graph(从 GraphReader 返回),因为它与我的理解完全相同。

非常感谢任何帮助如何解决这个问题(同时可能维护继承架构)!

非常感谢您!

0 投票
1 回答
40 浏览

c++ - 从抽象基类访问重载函数

我知道这个问题以前以某种形式被问过。但我仍然很困惑。

假设我有两个班级。

现在,如果我想在 B 类中公开 A 类中非虚函数的可见性 .... 我该怎么做?...换句话说,目前我能够以这种方式调用非虚函数

我想避免这种情况^

以及放置这个的解决方案

在公共 B 中指的是 A 中的虚函数 .... 不是非虚函数 ...所以我认为这不是解决方案。

0 投票
1 回答
79 浏览

c# - 有没有办法声明派生类的类型的抽象基类的成员?

假设我有一个抽象基类,我想在其中声明与派生自该基类的类的类型匹配的成员。

这是行不通的,因为parent每个派生类中的字段都可以是派生自BaseClass. 我想确保parentin 中的字段DerivedClass1只能是 type DerivedClass1。所以我在想也许我应该使用泛型。

这可能看起来令人困惑和循环,但它确实可以编译。它基本上是说parentisT必须从 generic 派生的类型BaseClass。所以现在派生类可以如下所示:

问题是我必须在声明时自己强制执行类型匹配DerivedClass。没有什么能阻止某人做这样的事情:

C# 是否有办法做到这一点,以便在基中声明的成员的类型肯定与派生类型匹配?

我认为这类似于这个 C++ 问题试图问的问题:Abstract base class for derived classes with functions that have a return type of the derived class

0 投票
6 回答
949 浏览

c++ - How to declare a member in a base template class where the type is dependent of the derived class?

Given a base class using CRTP, I'm looking at declaring a member in the base template class where the type is dependent of the derived class.

While the following works as intended:

I wonder if I could simplify the implementation. I could add a second template parameter to the Base template, and make BaseTraits simpler or even get rid of it. However the above snippet is already an attempt to remove the second template parameter. I'm looking at solutions that doesn't involve a second template parameter for Base.

I've tried something like the following but it doesn't compile:

error: invalid use of incomplete type 'class Derived'

UPDATE:

  • I'm limited to c++14.
  • Base must be a template.
  • Performance is a must.
0 投票
1 回答
227 浏览

java - 使用枚举在python中创建子类的新实例

我有以下 Java 代码,其中枚举数据类型用于创建基类的实例,如下所示: 主要抽象类:

子类:

如何创建上述枚举类型,以便我可以根据 PYTHON 中的“quad8”等元素名称创建不同子类的实例?

0 投票
1 回答
68 浏览

c++ - 以自身为参数的抽象基类虚纯方法

为任何糟糕的措辞道歉,我不太确定如何表达这个问题。

我有一个基类 A,它有一个纯虚拟运算符+=,它接受一个自身的实例。在派生类 B 中,我想覆盖基类的 operator+= 以便它采用 B 的实例(而不是 A)。

我明白为什么这不起作用;这两种方法是不同的函数,因为它们需要不同的参数。但是,我假设必须有某种方法来保证从 A 派生的任何类都将实现 operator+= ,其中它将派生类的实例作为参数。

请问你能提供一个解决方案吗?非常感谢!

0 投票
1 回答
1427 浏览

python - @staticmethod 返回值

在 Python 3.6 中,我试图在 AbstractBaseClass 中定义一个属性;我的第一次尝试是这样的(后来我发现我可以省略@staticmethod):

但是 PyCharm 向我显示了关于属性装饰器的警告: PyCharm 警告

据我了解,@staticmethod装饰器不会返回可调用但不同的东西。(我怀疑这也导致 mypy 在我的代码中对返回值类型提出错误,但是我无法在较小的代码示例中重现该问题)。

这里发生了什么?

0 投票
1 回答
80 浏览

python - 如何让一个类使用从另一个类获取属性的函数?

我试图让一个类使用另一个类中的一个函数,该类使用另一个类的属性。

下面是详细的问题:

假设我们有一个名为 的基类Worker。每个Worker人都想在House. 每个Worker都有一个Task可以选择和完成的 s 列表。每个Task都有一个name, a description, anenergy_cost来完成任务,它也有一个do_task函数可以让Worker实际完成任务。

下面是我们如何在代码中表示它:

但是,如果我们需要访问 aWorker的一个属性来执行 a怎么办Task?假设 aWorker有一个属性,称为work_speed指定任务完成的速度。怎么会Task知道Worker'swork_speed是什么?我们可以将一个Worker实例传递给一个task_listTask中的实例,如下所示:Worker

但这很笨拙,而且似乎也非常不必要。

我们也可以Task在 a 的类定义中继承 each Worker,但我们不需要额外的属性,如果我们有多个s ,该do_task方法将被覆盖。Task

理想情况下, aWorker应该能够Task在表单中执行 aworker.do_task()以便do_task可以访问 aWorker的属性,并且它应该能够使用对象energy_cost内部定义的Task属性。

我们将如何去做呢?