问题标签 [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.
python - “超级”在 Python 中做了什么?- super().__init__() 和显式超类 __init__() 之间的区别
有什么区别:
和:
我已经看到super
在只有单一继承的类中被大量使用。我可以理解您为什么要在多重继承中使用它,但不清楚在这种情况下使用它有什么优势。
java - JAVA中的super()函数
按钮类:
我在哪里声明:
super(title) 如何将String title 设置为按钮的标题?它与常规 JButton 的方法 .setText() 有何相同之处?
换句话说,调用 super() 如何与 .setText() 做同样的事情 super() 如何知道更改标题?.setText() 是 JButton 类中唯一将字符串作为参数的方法吗?
python - “MetaClass”、“__new__”、“cls”和“super”——具体的机制是什么?
我读过这样的帖子:
但不知何故,我感到困惑。许多困惑,例如:
我何时以及为什么必须执行以下操作?
或者
或者
super 究竟是如何工作的?
什么是链接 1 中的类注册和取消注册,它是如何工作的?(我认为这与singleton有关。我可能是错的,来自 C 背景。我的编码风格仍然是函数式和 OO 的混合体)。
类实例化(子类、元类、超类、类型)和方法调用(
) 带有注释良好的工作代码(虽然第一个链接非常接近,但它没有谈论 cls 关键字和 super(..) 和注册表)。最好是具有多重继承的示例。
PS:我将最后一部分作为代码制作,因为堆栈溢出格式正在将文本转换metaclass->__new__
为元类->新
java - 使用超类的构造函数
Java不允许多重继承,这意味着一个类不能从两个没有共同点的类继承,这意味着它们不在同一继承路径上。但是,如果这些类是该类的直接超类的超类,则一个类可以继承自更多类。但是该类间接地从这些类继承,这意味着它不会从这些上层超类中“看到”任何东西,对吧?在考虑构造函数时我很困惑(在构造函数中使用 super() )。例如,如果我们有以下类:
C 类的构造函数首先使用 super() 调用 B 类的构造函数。发生这种情况时,B 的构造函数本身首先调用 A 的构造函数(使用 super()),但是 C 的构造函数对 A 的构造函数一无所知,对吧?我的意思是,继承仅来自直接超类——继承层次结构中的第一个(最近的)类。这是我的问题——对于 super(),我们仅指直接超类的构造函数,无论继承层次结构中有多少其他类。这不仅适用于构造函数,还适用于任何方法和实例变量。
问候
python - Python super() 引发 TypeError
在 Python 2.5 中,以下代码引发了 a TypeError
:
如果我用 替换class X
,class X(object)
它将起作用。对此有何解释?
python - 使用 __init__() 方法理解 Python super()
我试图了解super()
. 从外观上看,两个子类都可以创建,就好了。
我很想知道以下 2 个子类之间的实际区别。
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__
属性。
c++ - 使用头文件时的 C++ 显式超类构造函数问题
我似乎对一个调用显式超类构造函数的继承类感到非常沮丧。我似乎无法正确使用语法!
到目前为止,我在这件事上看到的所有示例都没有将标头和内联类定义(使用 {})与带有头文件的前向声明分开,所以我不确定如何涵盖.h 和 .cc 文件之间的语法。任何帮助,将不胜感激!
这是编译器给我的错误(gcc):
serverconnection.h:在构造函数“ServerConnection::ServerConnection(std::string, std::string)”中:serverconnection.h:25:错误:输入 serverconnection.cc 结尾处预期为“{”:在全局范围内:serverconnection。 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:
提前非常感谢!
java - 从泛型函数返回泛型类型
我们有一个或多或少类似于以下的方法。但是我们目前返回 List ,函数 bla() 将List<Bar>
在运行时返回。
我正在寻找一种方法来使两者
和
可能的。基本上我希望它返回与接口兼容的 List 但这会产生以下错误
*类型不匹配:无法转换List<capture#3-of ? extends Bar>
为List<Interface>*
有什么方法可以使这种返回类型成为可能,或者运行时擦除是否使这成为不可能
编辑:在很多现有的代码库中,该方法被称为
因此这个返回类型必须保持兼容(重写/重构不是一个选项)
本质上我希望该方法返回 List<? super Bar>
如果调用为
当被
List<? super Foo>
称为
language-agnostic - 1950 年代和 1960 年代语言的编译器
我正在尝试为以下语言找到最好的编译器(如果它们确实可用):
- 算法 60
- TRAC
- 电信公司
- 超级计划
- 北汽
我不知道这些是否仍然存在,但是获得有关我可以在哪里找到这些的任何反馈会非常有帮助。