タグ付けされた質問 「super」

14
PECS(Producer Extends Consumer Super)とは何ですか?
OverаэтотвопросестьответынаStack Overflowнарусском:wildспользованиеwildcardвGenerics Java ジェネリックを読んでいるときにPECS(プロデューサーextendsとコンシューマーのsuper略)に出会いました。 extendsとの間の混乱を解決するためにPECSを使用する方法を誰かに説明できますかsuper?

9
Pythonで「スーパー」は何をしますか?
違いは何ですか: class Child(SomeBaseClass): def __init__(self): super(Child, self).__init__() そして: class Child(SomeBaseClass): def __init__(self): SomeBaseClass.__init__(self) super継承が1つしかないクラスで非常に多く使用されているのを見てきました。なぜ多重継承で使用するのかはわかりますが、このような状況で使用することの利点についてははっきりしません。
564 python  oop  inheritance  super 

7
super()は、新しいスタイルのクラスに対して「TypeError:classobjではなく、typeでなければならない」を発生させます。
次の使用は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)。

15
Javaのsuper()
されたsuper()親のコンストラクタを呼び出すために使用?説明してくださいsuper()。
222 java  super 

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) 「スーパー」組み込みメソッドの助けを借りてサンプルテストコードを取得しました。 ここにエラーがあります: 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 参考までに、これはpython自体のヘルプ(スーパー)です。 …

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? 書き込みには、2つの典型的なアプローチがありますCのは__init__: (旧式) ParentClass.__init__(self) (新しいスタイル) super(DerivedClass, self).__init__() ただし、どちらの場合でも、親クラス(AとB)が同じ規則に従っていない場合、コードは正しく機能しません(一部が見つからないか、複数回呼び出される可能性があります)。 では、正しい方法は何でしょうか?「ただ一貫している、どちらか一方に従っている」と言うのは簡単ですが、サードパーティのライブラリからのものである場合、AまたはBサードパーティのライブラリからのものである場合はどうでしょうか。すべての親クラスのコンストラクターが(正しい順序で、1回だけ)呼び出されるようにする方法はありますか? 編集:私がそうしている場合、私が何を意味するかを確認するには: 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 これを機能させるために、いくつかのコンパイル時の魔法が実行されます。その結果の1つは、次のコード(に再バインドさ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では、次のコードでaが発生し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 …

4
super.onCreate(savedInstanceState);
私はAndroidアプリケーションプロジェクトを作成し、MainActivity.javaでonCreate()それを呼び出していsuper.onCreate(savedInstanceState)ます。 初心者として、誰でも上記の行の目的を説明できますか?

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は2番目の引数として型を使用しても機能します。---以下に示すように、型を直接superに渡すことができます。 これは、do_something()をBのインスタンスで呼び出す必要があると言っても、Pythonが私に言っていることではありません。

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();ますか?そのままで?

2
`typing.NamedTuple`サブクラスの` super`はPython 3.8で失敗します
Python 3.6では機能し、Python 3.8では失敗するコードがあります。次のように要約するとsuper、のサブクラスを呼び出すtyping.NamedTupleようになります。 <ipython-input-2-fea20b0178f3> in <module> ----> 1 class Test(typing.NamedTuple): 2 a: int 3 b: float 4 def __repr__(self): 5 return super(object, self).__repr__() RuntimeError: __class__ not set defining 'Test' as <class '__main__.Test'>. Was __classcell__ propagated to type.__new__? In [3]: class Test(typing.NamedTuple): ...: a: int ...: b: float ...: #def __repr__(self): …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.