Questions tagged «super»


9
“ super”在Python中做什么?
之间有什么区别: class Child(SomeBaseClass): def __init__(self): super(Child, self).__init__() 和: class Child(SomeBaseClass): def __init__(self): SomeBaseClass.__init__(self) 我看到super在只有单一继承的类中经常使用它。我知道为什么您会在多重继承中使用它,但不清楚在这种情况下使用它的好处。
563 python  oop  inheritance  super 

7
对于新样式的类,super()引发“ TypeError:必须为类型,而不是classobj”
以下用法super()引发TypeError:为什么? >>> from HTMLParser import HTMLParser >>> class TextParser(HTMLParser): ... def __init__(self): ... super(TextParser, self).__init__() ... self.all_data = [] ... >>> TextParser() (...) TypeError: must be type, not classobj 在StackOverflow上有一个类似的问题:Python super()引发TypeError,该错误由用户类不是新型类的事实来解释。但是,上面的类是一种新式的类,因为它继承自object: >>> isinstance(HTMLParser(), object) True 我想念什么?我如何super()在这里使用? 使用HTMLParser.__init__(self)代替super(TextParser, self).__init__()可以工作,但是我想了解TypeError。 PS:Joachim指出,成为一个新类实例并不等同于成为一个实例object。我读了很多相反的书,因此感到困惑(基于object实例测试的新型类实例测试的示例:https : //stackoverflow.com/revisions/2655651/3)。


4
super()失败,并显示错误:当父级未从对象继承时,TypeError“参数1必须为类型,而不是classobj”
我收到一些我不知道的错误。任何线索我的示例代码有什么问题吗? class B: def meth(self, arg): print arg class C(B): def meth(self, arg): super(C, self).meth(arg) print C().meth(1) 我从“ super”内置方法的帮助下获得了示例测试代码。 这是错误: Traceback (most recent call last): File "./test.py", line 10, in ? print C().meth(1) File "./test.py", line 8, in meth super(C, self).meth(arg) TypeError: super() argument 1 must be type, not classobj …

6
用多重继承调用父类__init__,正确的方法是什么?
假设我有多个继承方案: class A(object): # code for A here class B(object): # code for B here class C(A, B): def __init__(self): # What's the right code to write here to ensure # A.__init__ and B.__init__ get called? 有编写的两个典型方法C的__init__: (老式) ParentClass.__init__(self) (较新的样式) super(DerivedClass, self).__init__() 但是,在任何一种情况下,如果父类(A和B)没有遵循相同的约定,则代码将无法正常工作(某些代码可能会丢失或多次调用)。 那么又是什么正确的方法呢?说“保持一致,遵循一个或另一个”很容易,但是如果A或B来自第三方图书馆,那又如何呢?有没有一种方法可以确保所有父类构造函数都被调用(以正确的顺序,并且只能调用一次)? 编辑:看看我的意思,如果我这样做: class A(object): def __init__(self): print("Entering …

1
为什么Python 3.x的super()有魔力?
在Python 3.x中,super()可以不带参数调用: class A(object): def x(self): print("Hey now") class B(A): def x(self): super().x() >>> B().x() Hey now 为了完成这项工作,需要执行一些编译时的魔术,其结果是以下代码(重新绑定super到super_)失败了: super_ = super class A(object): def x(self): print("No flipping") class B(A): def x(self): super_().x() >>> B().x() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in …
159 python  python-3.x  super 

4
Python super()引发TypeError
在Python 2.5中,以下代码引发TypeError: >>> class X: def a(self): print "a" >>> class Y(X): def a(self): super(Y,self).a() print "b" >>> c = Y() >>> c.a() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in a TypeError: super() argument 1 must be type, not classobj 如果我更换class …

13
Java:调用超级方法,该方法调用覆盖的方法
public class SuperClass { public void method1() { System.out.println("superclass method1"); this.method2(); } public void method2() { System.out.println("superclass method2"); } } public class SubClass extends SuperClass { @Override public void method1() { System.out.println("subclass method1"); super.method1(); } @Override public void method2() { System.out.println("subclass method2"); } } public class Demo { public static …


8
如何强制派生类调用超级方法?(就像Android一样)
我想知道,当创建新Activity类然后覆盖该onCreate()方法时,在eclipse中我总是会自动添加:super.onCreate()。这是怎么发生的?在抽象类或父类中是否存在强制执行此操作的java关键字? 我不知道不调用父类是否违法,但是我记得在某些方法中,我没有这样做就引发了异常。这也是Java内置的吗?您可以使用某些关键字来做到这一点吗?或如何完成?

5
在类方法中使用super
我正在尝试学习Python中的super()函数。 我以为我已经掌握了它,直到我看完这个示例(2.6)并发现自己陷入困境。 http://www.cafepy.com/article/python_attributes_and_methods/python_attributes_and_methods.html#super-with-classmethod-example Traceback (most recent call last): File "<stdin>", line 1, in <module> File "test.py", line 9, in do_something do_something = classmethod(do_something) TypeError: unbound method do_something() must be called with B instance as first argument (got nothing instead) >>> 当我在示例之前阅读此行时,这不是我期望的: 如果使用的是类方法,则没有实例可以调用super。对我们来说幸运的是,即使类型是第二个参数,super也可以工作。---可以将类型直接传递给super,如下所示。 Python不能通过说do_something()应该与B的实例一起调用来告诉我。

11
什么时候使用super()?
我目前正在Java课程中学习有关类继承的信息,但我不知道何时使用该super()调用? 编辑: 我发现使用此代码示例:super.variable class A { int k = 10; } class Test extends A { public void m() { System.out.println(super.k); } } 因此,我知道在这里,您必须使用它super来访问k超类中的变量。但是,在其他情况下,该怎么super();办?在其自己的?

12
从超类中获取子类的名称
假设我有一个名为的基类Entity。在该类中,我有一个静态方法来检索类名称: class Entity { public static String getClass() { return Entity.class.getClass(); } } 现在,我有另一个班级对此进行扩展。 class User extends Entity { } 我想获取User的类名称: System.out.println(User.getClass()); 我的目标是看到“ com.packagename.User”输出到控制台,但是我将最终以“ com.packagename.Entity”结尾,因为直接从静态方法中引用了Entity类。 如果这不是静态方法,则可以通过使用类中的this关键字Entity(即:)轻松解决return this.class.getClass()。但是,我需要此方法来保持静态。有关如何处理此问题的任何建议?

9
通用<的真实示例是什么?超级T>?
我知道这&lt;? super T&gt;代表任何级别的T父类T(任何级别的父类)。但是我真的很难想象这个通用绑定通配符的任何现实示例。 我了解这&lt;? super T&gt;是什么意思,并且已经看到了此方法: public class Collections { public static &lt;T&gt; void copy(List&lt;? super T&gt; dest, List&lt;? extends T&gt; src) { for (int i = 0; i &lt; src.size(); i++) dest.set(i, src.get(i)); } } 我正在寻找可以使用此构造的现实生活用例的示例,而不是对其含义的解释。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.