Tag: 超级

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

我正在运行Python 2.5,因此这个问题可能不适用于Python 3.当您使用多重inheritance创build钻石类层次结构并创build派生类的对象时,Python将执行Right Thing(TM)。 它调用派生类的构造函数,然后从左到右列出父类,然后是祖父类。 我熟悉Python的MRO ; 那不是我的问题。 我很好奇从超级对象返回的对象实际上是如何pipe理的,以正确的顺序在父类中调用超级调用。 考虑这个例子代码: #!/usr/bin/python class A(object): def __init__(self): print "A init" class B(A): def __init__(self): print "B init" super(B, self).__init__() class C(A): def __init__(self): print "C init" super(C, self).__init__() class D(B, C): def __init__(self): print "D init" super(D, self).__init__() x = D() 代码做直观的事情,它打印: D init B init C […]

Python超级方法和调用的替代品

我看到无处不在的例子超类方法应该被调用: super(SuperClass, instance).method(args) 这样做有什么缺点: SuperClass.method(instance, args)

从一个超类中获取一个子类的名字

比方说,我有一个名为Entity的基类。 在那个类中,我有一个静态方法来检索类名: class Entity { public static String getClass() { return Entity.class.getClass(); } } 现在我有另一个课程扩展。 class User extends Entity { } 我想获得用户的类名称: System.out.println(User.getClass()); 我的目标是看到“com.packagename.User”输出到控制台,但是我将以“com.packagename.Entity”结束,因为实体类是直接从静态方法引用的。 如果这不是一个静态方法,可以通过在Entity类中使用this关键字来轻松解决(例如: return this.class.getClass() )。 但是,我需要这种方法保持静态。 有关如何解决这个问题的任何build议?

如何强制派生类调用超级方法? (就像Android一样)

我想知道,当创build新的Activity类,然后重写onCreate()方法,在eclipse中,我总是得到自动添加: super.onCreate() 。 这是怎么发生的? 在强制这个抽象或父类有一个Java关键字? 我不知道是不是非法不要调用超类,但我记得在某些方法中,我得到了一个exception,因为没有这样做。 这也是内置到Java? 你可以使用一些关键字来做到这一点? 或者它是如何完成的?

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 void main(String[] args) { SubClass […]

super.onCreate(savedInstanceState);

作为一个新手,我有一个非常基本的问题:我已经在Eclipse中创build了一个Android应用程序项目,在MainActivity.java> onCreate()它调用super.onCreate(savedInstanceState) 。 任何人都可以解释上面的目的是什么?

Python super()引发TypeError

在Python 2.5.2中,下面的代码引发了一个TypeError: >>> class X: … def a(self): … print "a" … >>> class Y(X): … def a(self): … super(Y,self).a() … print "b" … >>> c = Y() >>> ca() 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 […]

在构造函数中放入super()是不必要的?

如果我不把它放在一个子类的构造函数中,这不是由编译器自动放置的吗? 那意味着我甚至不需要关心它呢? 在一些文章中,他们把它拿出来了。 如果我有一个带参数的构造函数,这会是构造函数还是需要一个没有参数列表的构造函数?

super()引发新类风格的“TypeError:必须是types,而不是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 ,其中的错误是由用户类不是新风格的类来解释的。 然而,上面的类是一个新的类,因为它inheritance了object : >>> isinstance(HTMLParser(), object) True 我错过了什么? 我如何使用super() ,在这里? 使用HTMLParser.__init__(self)而不是super(TextParser, self).__init__()会工作,但我想了解TypeError。 PS:Joachim指出,作为一个新式的实例并不等同于一个object 。 我读了相反的多次,因此我的困惑(基于object实例testing的新式类实例testing的示例: https : //stackoverflow.com/revisions/2655651/3 )。

如何避免super()的无限recursion?

我有这样的代码: class A(object): def __init__(self): self.a = 1 class B(A): def __init__(self): self.b = 2 super(self.__class__, self).__init__() class C(B): def __init__(self): self.c = 3 super(self.__class__, self).__init__() 实例化B按预期工作,但实例化Crecursion无限并导致堆栈溢出。 我该如何解决这个问题?