问题标签 [super]

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 投票
11 回答
259100 浏览

python - “超级”在 Python 中做了什么?- super().__init__() 和显式超类 __init__() 之间的区别

有什么区别:

和:

我已经看到super在只有单一继承的类中被大量使用。我可以理解您为什么要在多重继承中使用它,但不清楚在这种情况下使用它有什么优势。

0 投票
6 回答
52714 浏览

java - JAVA中的super()函数

按钮类:

我在哪里声明:

super(title) 如何将String title 设置为按钮的标题?它与常规 JButton 的方法 .setText() 有何相同之处?

换句话说,调用 super() 如何与 .setText() 做同样的事情 super() 如何知道更改标题?.setText() 是 JButton 类中唯一将字符串作为参数的方法吗?

0 投票
2 回答
29946 浏览

python - “MetaClass”、“__new__”、“cls”和“super”——具体的机制是什么?

我读过这样的帖子:

  1. Python 中的元类是什么?
  2. Python 中元类的(具体)用例是什么?
  3. Python 的 Super 很漂亮,但你不能用

但不知何故,我感到困惑。许多困惑,例如:

我何时以及为什么必须执行以下操作?

或者

或者

super 究竟是如何工作的?

什么是链接 1 中的类注册和取消注册,它是如何工作的?(我认为这与singleton有关。我可能是错的,来自 C 背景。我的编码风格仍然是函数式和 OO 的混合体)。

类实例化(子类、元类、超类、类型)和方法调用(

) 带有注释良好的工作代码(虽然第一个链接非常接近,但它没有谈论 cls 关键字和 super(..) 和注册表)。最好是具有多重继承的示例。

PS:我将最后一部分作为代码制作,因为堆栈溢出格式正在将文本转换metaclass->__new__ 为元类->

0 投票
5 回答
6305 浏览

java - 使用超类的构造函数

Java不允许多重继承,这意味着一个类不能从两个没有共同点的类继承,这意味着它们不在同一继承路径上。但是,如果这些类是该类的直接超类的超类,则一个类可以继承自更多类。但是该类间接地从这些类继承,这意味着它不会从这些上层超类中“看到”任何东西,对吧?在考虑构造函数时我很困惑(在构造函数中使用 super() )。例如,如果我们有以下类:

C 类的构造函数首先使用 super() 调用 B 类的构造函数。发生这种情况时,B 的构造函数本身首先调用 A 的构造函数(使用 super()),但是 C 的构造函数对 A 的构造函数一无所知,对吧?我的意思是,继承仅来自直接超类——继承层次结构中的第一个(最近的)类。这是我的问题——对于 super(),我们仅指直接超类的构造函数,无论继承层次结构中有多少其他类。这不仅适用于构造函数,还适用于任何方法和实例变量。

问候

0 投票
4 回答
46465 浏览

python - Python super() 引发 TypeError

在 Python 2.5 中,以下代码引发了 a TypeError

如果我用 替换class Xclass X(object)它将起作用。对此有何解释?

0 投票
7 回答
2149949 浏览

python - 使用 __init__() 方法理解 Python super()

我试图了解super(). 从外观上看,两个子类都可以创建,就好了。

我很想知道以下 2 个子类之间的实际区别。

0 投票
5 回答
28560 浏览

python - Python 的“超级”如何做正确的事?

我正在运行 Python 2.5,所以这个问题可能不适用于 Python 3。当您使用多重继承创建菱形类层次结构并创建派生类的对象时,Python 会做正确的事情 (TM)。它调用派生类的构造函数,然后是从左到右列出的父类,然后是祖父类。我熟悉 Python 的MRO;那不是我的问题。我很好奇从 super 返回的对象实际上如何以正确的顺序与父类中的 super 调用进行通信。考虑这个示例代码:

代码做直观的事情,它打印:

但是,如果您在 B 的 init 函数中注释掉对 super 的调用,则不会调用 A 和 C 的 init 函数。这意味着 B 对 super 的调用以某种方式知道 C 在整个类层次结构中的存在。我知道 super 返回一个带有重载 get 运算符的代理对象,但是 D 的 init 定义中 super 返回的对象如何将 C 的存在传达给 B 的 init 定义中 super 返回的对象?后续调用 super 使用的信息是否存储在对象本身上?如果是这样,为什么不是 super 而不是 self.super?

编辑:Jekke 非常正确地指出它不是 self.super 因为 super 是类的属性,而不是类的实例。从概念上讲这是有道理的,但实际上 super 也不是类的属性!您可以在解释器中通过创建两个类 A 和 B(其中 B 继承自 A)并调用dir(B). 它没有super__super__属性。

0 投票
3 回答
3599 浏览

c++ - 使用头文件时的 C++ 显式超类构造函数问题

我似乎对一个调用显式超类构造函数的继承类感到非常沮丧。我似乎无法正确使用语法!

到目前为止,我在这件事上看到的所有示例都没有将标头和内联类定义(使用 {})与带有头文件的前向声明分开,所以我不确定如何涵盖.h 和 .cc 文件之间的语法。任何帮助,将不胜感激!

这是编译器给我的错误(gcc):

serverconnection.h:在构造函数“ServerConnection::ServerConnection(std::string, std::string)”中:serverconnection.h:25:错误:输入 serverconnection.cc 结尾处预期为“{”:在全局范围内:s​​erverconnection。 cc:20: 错误: 重新定义“ServerConnection::ServerConnection(std::string, unsigned int, short unsigned int, PacketSender*, int)” serverconnection.h:25: 错误:“ServerConnection::ServerConnection(std::string , unsigned int, short unsigned int, PacketSender*, int)" 之前在这里定义 serverconnection.cc: 在构造函数 "ServerConnection::ServerConnection(std::string, std::string)": serverconnection.cc:20: error: no调用“Connection::Connection()”的匹配函数

我知道它正在尝试调用默认的 Connection 构造函数 Connection(),因为它只是不理解我的语法。

这是代码:

连接.h:

连接.cc:

服务器连接.h:

服务器连接.cc:

提前非常感谢!

0 投票
4 回答
3832 浏览

java - 从泛型函数返回泛型类型

我们有一个或多或少类似于以下的方法。但是我们目前返回 List ,函数 bla() 将List<Bar>在运行时返回。

我正在寻找一种方法来使两者

可能的。基本上我希望它返回与接口兼容的 List 但这会产生以下错误

*类型不匹配:无法转换List<capture#3-of ? extends Bar>List<Interface>*

有什么方法可以使这种返回类型成为可能,或者运行时擦除是否使这成为不可能

编辑:在很多现有的代码库中,该方法被称为

因此这个返回类型必须保持兼容(重写/重构不是一个选项)

本质上我希望该方法返回 List<? super Bar>如果调用为

当被 List<? super Foo>称为

0 投票
6 回答
626 浏览

language-agnostic - 1950 年代和 1960 年代语言的编译器

我正在尝试为以下语言找到最好的编译器(如果它们确实可用):

  • 算法 60
  • TRAC
  • 电信公司
  • 超级计划
  • 北汽

我不知道这些是否仍然存在,但是获得有关我可以在哪里找到这些的任何反馈会非常有帮助。