問題タブ [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 投票する
3 に答える
4224 参照

java - Java型引数では、厳密にサブタイプのみを意味しますか? またはEでも十分でしょうか?

Java型引数では、厳密にサブタイプのみを意味しますか? またはEでも十分でしょうか?

0 投票する
1 に答える
1018 参照

ruby - 祖父母のメソッドを呼び出して、ルビーで親をスキップするにはどうすればよいですか?

継承チェーンで特定のメソッド呼び出しを選択するにはどうすればよいですか?

したがって、出力はA:Boo、C:Booになります。

TIA、

-ダニエル

0 投票する
1 に答える
11489 参照

python - Djangoform.saveステップバイステップ

2つの別々のビュー関数(add / edit:)からトリガーされた製品を追加/編集するためのフォーム(フィールド'user'はユーザーの外部キー)があるとします。

フォームのsaveメソッドは次のようになります。

誰かがこのsaveメソッドで何が起こっているのかを段階的に教えてもらえますか?このフォームでsuperを呼び出すのはなぜですか?関数呼び出しが同じ場合、新製品を編集して保存するときの処理全体の違いは何ですか?

0 投票する
4 に答える
630 参照

python - Python: `super` の引数の順序をどのように覚えていますか?

superタイトルが示すように、の引数の順序をどのように覚えていますか? 私が見逃したニーモニックはありますか?

何年ものPythonプログラミングの後、私はまだ調べなければなりません:(

(記録のために、それはですsuper(Type, self)

0 投票する
1 に答える
333 参照

java - スーパー キーワードに関する混乱。Java で実装された Decorator パターン

上記の説明はとてもいいです。

ただし、以下に示すように、Decorator Pattern (DeP) の実装には少し混乱しています。

http://www.netobjectives.com/resources/books/design-patterns-explained/java-code-examples/chapter17/#17-1

上記のリンクされたコードのデザインは、tinypic.com/view.php?pic=xnaqlt&s=3 で提供されています。

「super.callTrailer();」で混乱しています。デコレータ クラス Header1、Header2、Footer1、および Footer2 で、すべて TicketDecorator から派生します。

「callTrailer();」だけでいいじゃないですか。? 各デコレーター オブジェクトは、「private Component myTrailer;」という行により、次のデコレーターへの独自の参照を持つことになります。

注: 私は Java に精通しておらず、デザイン パターンの初心者です。

0 投票する
1 に答える
386 参照

python - (Python)予期しないときに作成されたクロージャ

ネストされたクラスを作成するときに予期しないクロージャが発生しました。これはメタクラス、スーパー、またはその両方に関連するものだと思います。これは、クロージャがどのように作成されるかに間違いなく関係しています。私はpython2.7を使用しています。

これが私が見ているのと同じ問題を示す5つの単純化された例です(それらはすべて最初のものから構築されます):

例1:

例2:

例3:

例4:

例5:

これが私が理解していることです(例を参照):

  • メタクラスは継承されるため、のメタクラスSubclassを取得しBaseます。
  • 影響を受けるのは影響を受けるだけ__init__で、Subclass.otherメソッドは影響を受けません(#1)。
  • 削除Subclass.otherしても違いはありません(#1)。
  • self.name=nameから削除しSubclass.__init__ても違いはありません(#1)。
  • クロージャセル内のオブジェクトは関数ではありません。
  • オブジェクトはMetaclassまたはではありませんが、 (#1)と同じようBaseに、タイプのオブジェクトがあります。MetaclassBase
  • オブジェクトは、実際にはネストされたタイプSubclass(#1)のオブジェクトです。
  • とのクロージャーセルはt1.subclass.__init__t1.subclass2.__init__2つの異なるクラス(#1)からのものですが、同じです。
  • Subclass(#1)の作成をネストしない場合、クロージャーは作成されません。
  • 電話をかけないとsuper(...).__init__Subclass.init__クロージャーは作成されません(#2)。
  • noを割り当て__metaclass__てから継承するとobject、同じ動作が表示されます(#3)。
  • のクロージャセルのオブジェクトt3.other.__init__t3.other(#3)です。
  • メタクラスに__init__(#4)がない場合も、同じ動作が発生します。
  • Baseがない場合__init__(#4)も同じ動作が発生します。
  • 例4の3つのサブクラスのクロージャーセルはすべて異なり、それぞれが対応するクラス(#4)と一致します。
  • をにsuper(...).__init__置き換えるとBase.__init__(self)、クロージャーが消えます(#5)。

これが私が理解していないことです:

  • なぜクロージャーが設定されるの__init__ですか?
  • なぜクロージャーが他のクロージャーに設定されないのですか?
  • クロージャーセル内のオブジェクトが、__init__属するクラスに設定されているのはなぜですか?
  • super(...).__init__が呼び出されたときにのみこれが発生するのはなぜですか?
  • Base.__init__(self)が呼び出されたときになぜこれが起こらないのですか?
  • これは実際にはメタクラスの使用とはまったく関係がありますか(おそらく、デフォルトのメタクラスはtype)ですか?

助けてくれてありがとう!

-エリック

(更新)これが私がその時見つけたものです(ジェイソンの洞察に基づいて):

まず、関数の名前はそれ自体の本体内のスコープ内にあります。次に、関数は、それらの関数を参照する場合、それらが定義されている関数のクロージャを取得します。

関数名がそのようなスコープにあることに気づいていませんでした。同じことがクラスにも当てはまります。クラスが関数のスコープ内で定義されている場合、クラスのメソッド内でそのクラス名を参照すると、次のように、クラスはそのメソッドの関数のクロージャにバインドされます。

ただし、非関数に対してクロージャを作成できないため、以下は失敗します。

良いもの!

0 投票する
12 に答える
97735 参照

java - スーパークラス内からサブクラスの名前を取得する

という名前の基本クラスがあるとしましょうEntity。そのクラスには、クラス名を取得するための静的メソッドがあります。

今、私はそれを拡張する別のクラスを持っています。

Userのクラス名を取得したい:

私の目標は、コンソールに「com.packagename.User」の出力を表示することですが、Entityクラスは静的メソッドから直接参照されているため、代わりに「com.packagename.Entity」になります。

これが静的メソッドでない場合は、クラスthis内のキーワード(つまり、:)を使用することで簡単に解決できます。ただし、このメソッドを静的に保つ必要があります。これにアプローチする方法について何か提案はありますか?Entityreturn this.class.getClass()

0 投票する
2 に答える
8010 参照

python - サブクラス化を介してnamedtupleのコンストラクター引数を変更しますか?

namedtuple短いビットフィールドで個々のフラグを表すを作成したいと思います。タプルが作成される前にビットフィールドをアンパックできるように、サブクラス化しようとしています。しかし、私の現在の試みは機能していません:

現在、私の経験super()は限られており、私の経験__new__は事実上存在しないので、(私にとって)謎めいたエラーをどうすればよいのかよくわかりませんTypeError: super.__new__(Status): Status is not a subtype of super。グーグルでドキュメントを掘り下げても、啓蒙的なものは何も得られていません。

ヘルプ?

0 投票する
17 に答える
523662 参照

java - Javaのsuper()

super()親コンストラクターを呼び出すために使用されますか?説明してくださいsuper()

0 投票する
2 に答える
3215 参照

python - 変数スーパークラス メソッドの呼び出し

可変メソッド名を使用してスーパークラスのメソッドを呼び出そうとしています。通常、次の 2 行のコードは同等のものとして表示されます。

実際、これは最初の行を使用したときに実際に起こることでもあると私は信じています。ただし、次の例では、2 行目で奇妙な問題が発生します。

superスーパー オブジェクトを構築し、スーパー クラスのメソッドを呼び出すために使用します。直接実行すると期待どおりに機能し__getattribute__ますが、最初にメソッドを取得するために使用すると、サブクラスのメソッドを何度も呼び出す無限ループが発生します。

次のコードを参照してください。

そのコードを実行すると、すべてが期待どおりに機能し、次のような出力が得られるはずです。

したがって、直接アクセスする方法と を介する方法の両方の方法は__getattribute__同じように見えます。ただし、メソッド呼び出しをコメントアウトされた行に置き換えると、再帰ランタイム エラーが発生します。

なぜこれが起こるのか、さらに重要なことに、作業ラインを使用するときに、Python が内部的に行うのと同じ方法で実際にメソッドにアクセスするにはどうすればよいでしょうか?

編集

すでにすべてを試したと思ったとき、これが機能していることがわかりました:

実際には に等しくなりsuper( B, self ).exampleます。