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

c++ - *你*使用 C++ ABC 构造函数做什么?

这里的人们在该领域使用 C++ 抽象基类构造函数做什么?我说的是没有数据成员和非纯虚拟成员的纯接口类。

任何人都可以演示任何以有用的方式使用 ABC 构造函数的习语吗?或者仅仅是使用 ABC 实现接口的本质,它们保持为空、内联和受保护?

0 投票
1 回答
1105 浏览

struts - Struts 2.1.6 中的 ONGL

我正在使用带有 ONGL 的 struts 2.1.6。请查看下面的代码,并告诉我应该<td>在第 3 行和第 4 行中定义宽度、高度、bgcolor 等标签的属性。

1) s:form action="Login">
2) <table>
3) <tr><s:textfield key="username"/></tr>
4) <tr><s:password key="password" /></tr>
5) </table>
6)</s:form>

0 投票
4 回答
586 浏览

c++ - 什么是“近乎空”的班级?

编译以下类

使用gcc -fdump-class-hierarchy.

gcc发出

“近乎空”的意义是什么?这是什么意思?

0 投票
5 回答
1648 浏览

c++ - 调用虚函数时继承类“无效指针错误”

正如您在下面的代码中看到的,我有一个抽象基类“HostWindow”,以及从它派生的类“Chrome”。所有功能都在 Chrome 中实现。问题是,如果 Chrome 中的函数是虚拟的,我就无法调用它们。

假设我们有一个 Chrome 实例,我们调用了一些函数:

每当我调用虚函数时,我得到的空指针错误是:

程序收到信号 EXC_BAD_ACCESS,无法访问内存。原因:KERN_PROTECTION_FAILURE 地址:0x00000008

知道发生了什么吗?

更新: 正如你们中的许多人指出的那样——这段代码实际上是运行的。不幸的是,我无法提供更完整的示例,因为代码在 WebCore (WebKit) 内部很深。但是,我已经缩小了问题的范围。如果我手动创建一个 Chrome 实例,调用虚拟函数就可以了。所以问题出在这个特定的 chrome 实例上——它无法正确实例化。现在,Chrome 实例在另一个类的构造函数中实例化。我会进一步调查...

更新 2: 好的,检查违规实例上的 vtable 显示它为空;来自 GDB:

一个普通的实例有一个正确的 vtable。所以,我必须弄清楚为什么 vtable 是 nil - 我想知道这怎么会发生?也许是因为它在其他一些构造函数类中被实例化?

更新 3: 看起来我对问题是正确的,因为它是在另一个类的构造函数中实例化。

所以,在实例化之前看起来像这样:

并且 m_chrome 是一个无效的实例,具有一个 nil vtable。我已经更改了实例化,因此它在第一次需要变量时发生(这涉及保存 ChromeClient 以供以后使用):

现在 Page::chrome() 实例是正确的,具有正确的 vtable - 相当奇怪!

更新 4: 最后一次更新,我保证 :)。好的,所以我已经准确地指出了它。如果您在 Page 构造函数的主体中实例化它,您将使用 vtable 获得正确的实例。如果您在 Page 构造函数的头部实例化它,它就没有 vtable。您可以在构造函数的头脑中进行的变量设置类型是否有任何限制?我想这是另一个 Stackoverflow 问题。

谢谢你们这么有帮助。

0 投票
2 回答
91 浏览

c++ - 在设计 C++ 中几个人使用的类时,我应该使用 API/ABC 吗?

我即将添加一个 X 类,将由我之前设计的三个类(A、B 和 C)使用。

新类 X 将包含新特性的数据和函数,并为使用它来隐藏较低层的类提供服务。问题是 A、B 和 C 对 X 类的使用会完全不同,即使用它的不同功能。

我的问题是我是否应该为新类 X 提供一个 API(或 C++ 中的抽象基类)。如果我应该,该 API 应该是每个 X 类还是每个 A、B 和 C 类?我在某处读到 API 有时与实现它的类的调用者更密切相关。如果我确实为每个调用者提供了一个 API,那么 API 将只包含特定调用者需要的函数。

或者我应该只创建一个普通的 C++ 类并让调用者在 A、B 和 C 中使用 X 的公共函数的子集,尽管他们“技术上”可以全部使用它们?X 类的功能不太可能改变,也不需要创建与 X 类似的类。

如果我没有完全迷失在面向对象的编程中,那么为类提供接口/API 的一个原因是,如果添加另一个子类,则使用该接口/API 的代码不需要更改,因为调用者在接口上工作名称并使用动态绑定来解析正确的子类类型。

最好的问候,如果有任何不清楚的地方,请告诉我,我会尽快回答。

谢谢,

托马斯

0 投票
6 回答
87931 浏览

python - 为什么在 Python 中使用抽象基类?

因为我习惯了 Python 中鸭子类型的旧方法,所以我无法理解对 ABC(抽象基类)的需求。关于如何使用它们的帮助很好。

我试图阅读PEP中的基本原理,但它超出了我的想象。如果我正在寻找一个可变序列容器,我会检查__setitem__,或者更有可能尝试使用它(EAFP)。我还没有遇到过数字模块的实际用途,它确实使用了 ABC,但这是我必须理解的最接近的。

谁能给我解释一下原因吗?

0 投票
2 回答
5407 浏览

python - 如何子类化 collections.Iterator?

根据关于ABCs的文档,我应该只需要添加一个next方法就可以进行子类化collections.Iterator。所以,我正在使用以下类:

但是,当我尝试实例化它时出现错误:

我猜我在做一些愚蠢的事情,但我无法弄清楚它是什么。任何人都可以对此有所了解吗?我可以添加一个__next__方法,但我的印象是只适用于 C 类。

0 投票
2 回答
590 浏览

python - Python:在 Python < 2.6 中使用 abc

有人知道旧版本 Python(早于 2.6)的abc实现吗?

编辑:例如,我正在寻找一个与 ABCMeta 和 abstractmethod 做同样事情的片段,具有相同的接口,我实际上需要使一段代码向后兼容

0 投票
4 回答
3788 浏览

python - Python:创建特殊类型的子类`type`(例如“int列表”)

我正在尝试子类化type以创建一个允许构建专用类型的类。例如ListType

但是,这ListOfInt永远不会用于创建实例!我只是将它用作type我可以操纵以与其他类型进行比较的实例......特别是,在我的情况下,我需要根据输入的类型查找合适的操作,并且我需要类型包含更多的精度(如list of intorXML string等​​...)。

所以这就是我想出的:

在上面的代码中使用abc并不明显......但是如果我想像上面ListType的例子那样编写一个子类,那么它就变得有用了......

基本功能实际上有效:

但是当我尝试检查是否t是 的一个实例时SpzType,Python 吓坏了:

我探索了发生了pdb.pm()什么,我发现以下代码引发了错误:

奇怪的 ?!显然有一个论点......那是什么意思?任何的想法 ?我误用了abc吗?

0 投票
2 回答
327 浏览

django - 10 个站点通过相同的代码库 django MTI、ABC 或 EAV

我有一个基于 django 的网上商店,在过去的一年里一直在发展。目前大约有 8 个国家特定的商店运行相同的代码库,外加一个 API,很快就会有一个 B2B 网站,还有一些国家要添加到列表中。

模型结构需要变化,特别是地址模型、帐户模型等中的字段。

让事情变得更复杂一些,该站点正在运行 multidb,每个商店实例都在一个单独的数据库中。所以我有一种情况,我可能有一个基本的 ABC 模型,例如:

然后在整个应用程序中编码以选择正确的模型,例如

countrysettings.country 实际上是一个单独的设置类,它是 threading.local 的子类,并且国家代码也对应于 settings.DATABASES 中的一个键,由地理定位中间件处理程序配置。因此选择了正确的数据库,并且模型特定的变化反映在每个国家的数据库中。

但是这种方法存在问题:

  1. 它完全破坏了同步数据库并且对南方没有好处,除非我破解 ./manage.py 以便我可以通过国家数据库,而不是需要中间件来设置它。

  2. 看起来很乱。如果 countrysettings.country == "xx": 代码就这么多,还有很多子类模型。

所以我想改用 django-eav,但我预见到管理中的问题,特别是字段排序。我知道 django-eav 将为管理员构建一个模型表单,其中包含 eav 字段,但我理想情况下希望这些与国家相关的显示或隐藏。

我还考虑过使用非抽象基类,例如地址,然后在需要时创建特定于国家/地区的变体(例如模型表继承)。但后来我预见到基本模型会因每个模型变体的 one2one 字段而过载。但它会解决管理员的问题。

另一种选择可能是有一个额外的数据字段,并将其他字段序列化为 json 或 csv 或其他内容并将它们存储在此字段中。