問題タブ [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) は文字列タイトルをボタンのタイトルにどのように設定しますか? 通常の JButton のメソッド .setText() と同じことをどのように行いますか?
つまり、super() を呼び出すと .setText() と同じことがどのように行われるのでしょうか? super() はどのようにしてタイトルの変更を認識したのでしょうか? .setText() は、文字列をパラメーターとして受け取る JButton クラスの唯一のメソッドですか?
python - 「MetaClass」、「__ new __」、「cls」、「super」-メカニズムは正確には何ですか?
私はこれらのような投稿を読みました:
しかし、どういうわけか私は混乱しました。次のような多くの混乱:
いつ、なぜ私は次のようなことをしなければならないのですか?
また
また
スーパーはどのように正確に機能しますか?
link1のクラスレジストリとアンレジストリとは何ですか?それはどのように正確に機能しますか?(私はそれがシングルトンと関係があると思いました。私は間違っているかもしれません、Cのバックグラウンドからです。私のコーディングスタイルはまだ機能とOOの混合です)。
クラスのインスタンス化(サブクラス、メタクラス、スーパー、タイプ)とメソッド呼び出し(
)適切にコメントされた作業コードを使用します(最初のリンクは非常に近いですが、clsキーワードとsuper(..)およびレジストリについては説明していません)。できれば多重継承の例。
PS:Stack Overflowのフォーマットでテキストmetaclass->__new__
がメタクラスに変換されていたため、最後の部分をコードとして作成しました-> new
java - スーパークラスのコンストラクターを使用する
Javaは多重継承を許可していません。つまり、クラスは2つのクラスから継承できません。これは、共通点がないため、同じ継承パス上にないことを意味します。ただし、これらのクラスがクラスの直接スーパークラスのスーパークラスである場合、クラスはより多くのクラスから継承できます。しかし、クラスはこれらのクラスから間接的に継承します。つまり、これらの上位のスーパークラスからは何も「認識」されません。コンストラクターを検討するときに混乱しました(コンストラクターでsuper()を使用)。たとえば、次のクラスがある場合:
クラスCのコンストラクターは、最初にsuper()を使用してクラスBのコンストラクターを呼び出します。これが発生すると、Bのコンストラクター自体が最初にAのコンストラクターを呼び出します(super()を使用)が、CのコンストラクターはAのコンストラクターについて何も知りませんよね?つまり、継承は直接のスーパークラス(継承階層の最初の(最も近い)クラス)からのみです。これが私の質問です。super()では、継承階層に他のクラスがいくつあっても、直接スーパークラスのコンストラクターのみを意味します。そして、これはコンストラクターだけでなく、すべてのメソッドとインスタンス変数に適用されます。
よろしく
python - Python super() が TypeError を発生させます
Python 2.5 では、次のコードで が発生しTypeError
ます。
を に置き換えるclass X
とclass X(object)
動作します。これについての説明は何ですか?
python - __init __()メソッドを使用したPython super()の理解
の使用法を理解しようとしていますsuper()
。その外観から、両方の子クラスを作成できます。
次の2つの子クラスの実際の違いについて知りたいです。
python - Pythonの「スーパー」はどのように正しいことをしますか?
私はPython2.5を実行しているので、この質問はPython 3には当てはまらない可能性があります。多重継承を使用してdiamondクラス階層を作成し、最も派生したクラスのオブジェクトを作成すると、PythonはRight Thing(TM)を実行します。最も派生したクラスのコンストラクターを呼び出し、次に左から右にリストされている親クラス、次に祖父母を呼び出します。私はPythonのMROに精通しています。それは私の質問ではありません。スーパーから返されたオブジェクトが実際に親クラスのスーパーの呼び出しに正しい順序で通信する方法に興味があります。このサンプルコードを考えてみましょう。
コードは直感的なことを行い、次のように出力します。
ただし、Bのinit関数でsuperの呼び出しをコメントアウトすると、AもCのinit関数も呼び出されません。これは、Bのsuperへの呼び出しが、クラス階層全体におけるCの存在を何らかの形で認識していることを意味します。superはオーバーロードされたget演算子でプロキシオブジェクトを返すことを知っていますが、Dのinit定義でsuperによって返されるオブジェクトは、Bのinit定義でsuperによって返されるオブジェクトにCの存在をどのように伝えますか?その後のスーパーユースの呼び出しで得られる情報は、オブジェクト自体に保存されていますか?もしそうなら、なぜスーパーではなくself.superではないのですか?
編集:Jekkeは、superはクラスのインスタンスではなく、クラスの属性であるため、self.superではないことを非常に正しく指摘しました。概念的にはこれは理にかなっていますが、実際にはスーパーもクラスの属性ではありません!これは、BがAから継承する2つのクラスAとBを作成し、を呼び出すことによって、インタープリターでテストできます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:エラー:いいえ「Connection::Connection()」を呼び出すためのマッチング関数
構文を理解していないため、デフォルトのConnectionコンストラクターであるConnection()を呼び出そうとしていることを理解しています。
コードは次のとおりです。
connection.h:
connection.cc:
serverconnection.h:
serverconnection.cc:
よろしくお願いします!
java - ジェネリック関数からジェネリック型を返す
多かれ少なかれ次のような方法があります。ただし、現在、実行時に関数 bla() で返される List を返しList<Bar>
ます。
私は両方を作る方法を探しています
と
可能。基本的に、インターフェイスと互換性のあるリストを返すようにしたいのですが、これにより次のエラーが発生します
List<capture#3-of ? extends Bar>
*タイプの不一致: からに変換できませんList<Interface>*
この戻り値の型を可能にする方法はありますか、または実行時の消去によりこれが不可能になりますか
編集:既存のコードベースの多くでは、メソッドは次のように呼び出されます
したがって、この戻り値の型は互換性を維持する必要があります (書き換え/リファクタリングはオプションではありません)。
<? super Bar>
基本的に、メソッドが次のように呼び出された場合に List を返すようにしたい
と
List<? super Foo>
呼ばれるとき
language-agnostic - 1950 年代と 1960 年代の言語のコンパイラ
次の言語に最適なコンパイラ (実際に利用できる場合) を見つけようとしています。
- アルゴール60
- TRAC
- TELCOMP
- スーパープラン
- バカイク
これらのいずれかがまだ存在するかどうかはわかりませんが、これらの場所についてフィードバックをいただけると非常に助かります。