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

継承とは、オブジェクト指向プログラミングのシステムであり、オブジェクトは独自の定義を提供する必要なく、前の型によって定義された操作をサポートできます。これは、オブジェクト指向プログラミングにおけるポリモーフィズムの主要なベクトルです。

5
辞書を「完全に」上書きする方法は?
どうすれば、dictのサブクラスをできるだけ「完璧」にすることができますか?最終的な目標は、キーが小文字である単純な辞書を持つことです。 これを機能させるためにオーバーライドできる小さなプリミティブのセットがあるはずですが、私のすべての研究と試みによれば、そうではないようです: /をオーバーライドする__getitem____setitem__と、get/が機能setしなくなります。どうすればそれらを機能させることができますか?確かに個別に実装する必要はありませんか? 酸洗いが機能しないようにしてい__setstate__ますか?実装する必要がありますか? 私は、DO 必要repr、updateと__init__? 可変マッピングのみを使用する必要がありますUserDict か(またはを使用してはいけないようDictMixinです)?もしそうなら、どうですか?ドキュメントは正確には啓蒙的ではありません。 これが私の最初の試みですが、get()動作しません。間違いなく他にも多くの小さな問題があります。 class arbitrary_dict(dict): """A dictionary that applies an arbitrary key-altering function before accessing the keys.""" def __keytransform__(self, key): return key # Overridden methods. List from # /programming/2390827/how-to-properly-subclass-dict def __init__(self, *args, **kwargs): self.update(*args, **kwargs) # Note: I'm using dict directly, since super(dict, self) …


3
プロトタイプベースとクラスベースの継承
JavaScriptでは、すべてのオブジェクトが同時にインスタンスとクラスになります。継承を行うには、任意のオブジェクトインスタンスをプロトタイプとして使用できます。 Python、C ++などでは、別々の概念としてクラスとインスタンスがあります。継承を行うには、基本クラスを使用して新しいクラスを作成する必要があります。新しいクラスを使用して、派生インスタンスを生成できます。 JavaScriptがこの方向に進んだのはなぜですか(プロトタイプベースのオブジェクト指向)?従来のクラスベースのオブジェクト指向オブジェクトに対するプロトタイプベースのオブジェクト指向オブジェクトの利点(および欠点)は何ですか?

3
thisポインタを通じてテンプレートの基本クラスメンバーにアクセスする必要があるのはなぜですか?
以下のクラスはテンプレートでなかった場合、私は単に持っている可能性がxでderivedクラス。ただし、以下のコードでは、を使用する必要がありますthis->x。どうして? template <typename T> class base { protected: int x; }; template <typename T> class derived : public base<T> { public: int f() { return this->x; } }; int main() { derived<int> d; d.f(); return 0; }

10
AngularJSコントローラーは、同じモジュール内の別のコントローラーから継承できますか?
モジュール内では、コントローラーは外部コントローラーからプロパティを継承できます。 var app = angular.module('angularjs-starter', []); var ParentCtrl = function ($scope, $location) { }; app.controller('ChildCtrl', function($scope, $injector) { $injector.invoke(ParentCtrl, this, {$scope: $scope}); }); 例:デッドリンク:http : //blog.omkarpatil.com/2013/02/controller-inheritance-in-angularjs.html モジュール内のコントローラーも兄弟から継承できますか? var app = angular.module('angularjs-starter', []); app.controller('ParentCtrl ', function($scope) { //I'm the sibling, but want to act as parent }); app.controller('ChildCtrl', function($scope, $injector) { …

14
新規とオーバーライドの違い
次の違いは何ですか? ケース1:基本クラス public void DoIt(); ケース1:継承されたクラス public new void DoIt(); ケース2:基本クラス public virtual void DoIt(); ケース2:継承されたクラス public override void DoIt(); ケース1と2はどちらも、私が実行したテストに基づいて同じ効果があるようです。違いはありますか、それとも望ましい方法ですか?

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自体のヘルプ(スーパー)です。 …

13
あなたはstd :: vectorから継承しないでください
わかりました、これを告白するのは本当に難しいですが、私は現在、から継承する強い誘惑がありstd::vectorます。 ベクター用に約10のカスタマイズされたアルゴリズムが必要であり、それらを直接ベクターのメンバーにしたい。しかし当然ながら、の残りstd::vectorのインターフェイスも必要です。さて、私の最初のアイデアは、法律を遵守する市民std::vectorとして、MyVectorクラスにメンバーを含めることでした。しかし、私はすべてのstd :: vectorのインターフェースを手動で再提供する必要があります。入力するには多すぎます。次に、私はプライベート継承について考えました。そのため、メソッドを再提供する代わりusing std::vector::memberに、パブリックセクションにをまとめて記述します。これも実際には退屈です。 そして、私は実際に、私は単純にからパブリックに継承できると本当に思っていますがstd::vector、このクラスは多態的に使用されるべきではないという警告をドキュメントに提供しています。ほとんどの開発者は、これを多態的に使用してはならないことを理解するのに十分な能力があると思います。 私の決定は完全に不当なものですか?もしそうなら、なぜですか?追加のメンバーが実際にはメンバーになるが、ベクターのすべてのインターフェースを再入力する必要がない代替案を提供できますか?疑わしいですが、できれば幸せです。 また、一部の馬鹿が次のようなものを書くことができるという事実は別として std::vector<int>* p = new MyVector MyVectorを使用する上で他の現実的な危険はありますか?現実的と言うことで、ベクトルへのポインタを受け取る関数を想像するようなものを破棄します... さて、私は私のケースを述べました。私は罪を犯しました。今私を許すかどうかはあなた次第です:)
189 c++  oop  inheritance  stl  vector 

9
Mavenプロジェクトバージョンの継承-親バージョンを指定する必要がありますか?
2つのプロジェクトがあります。親プロジェクト:A、サブプロジェクト:B A / pom.xml: <groupId>com.dummy.bla</groupId> <artifactId>parent</artifactId> <version>0.1-SNAPSHOT</version> <packaging>pom</packaging> そしてB / pom.xmlには、 <parent> <groupId>com.dummy.bla</groupId> <artifactId>parent</artifactId> <version>0.1-SNAPSHOT</version> </parent> <groupId>com.dummy.bla.sub</groupId> <artifactId>kid</artifactId> Bに親からバージョンを継承させたいので、私の場合、置く必要があるのはだけ0.1-SNAPSHOTですA/pom.xml。しかし、親セクションの下<version>0.1-SNAPSHOT</version>からを削除するとB/pom.xml、Mavenは親のバージョンがないことについて不平を言います。 両方のポンポン${project.version}を避けるために私がちょうど使用できる方法またはこのようなものはあり01.-SNAPSHOTますか?
189 inheritance  maven 

2
Rubyクラスが別のクラスのサブクラスであるかどうかをテストする
クラスが別のクラスから継承するかどうかをテストしたいのですが、そのためのメソッドが存在しないようです。 class A end class B < A end B.is_a? A => false B.superclass == A => true 私が欲しいものの簡単な実装は次のようになります: class Class def is_subclass_of?(clazz) return true if superclass == clazz return false if self == Object superclass.is_subclass_of?(clazz) end end しかし、私はこれがすでに存在することを期待します。

11
List <DerivedClass>をList <BaseClass>に変換します
基本クラス/インターフェースから継承できますが、List&lt;&gt; 同じクラス/インターフェースを使用して宣言できないのはなぜですか? interface A { } class B : A { } class C : B { } class Test { static void Main(string[] args) { A a = new C(); // OK List&lt;A&gt; listOfA = new List&lt;C&gt;(); // compiler Error } } 回避策はありますか?

11
Javaで継承を禁止する理由は何ですか?
Javaでの継承を禁止する正当な理由は何ですか(たとえば、最終的なクラスを使用したり、単一のプライベートなパラメーターのないコンストラクターを使用したクラスを使用したりすることによって)。メソッドをfinalにする正当な理由は何ですか?
178 java  inheritance  final 

8
Kotlinでデータクラスを拡張する
データクラスは、Javaの昔ながらのPOJOに取って代わるようです。これらのクラスが継承を可能にすることはかなり期待できますが、データクラスを拡張する便利な方法はありません。私が必要なのはこのようなものです: open data class Resource (var id: Long = 0, var location: String = "") data class Book (var isbn: String) : Resource() 上記のコードは、component1()メソッドの衝突により失敗します。dataアノテーションを1つのクラスだけに残しても、機能しません。 おそらく、データクラスを拡張する別のイディオムがありますか? UPD:子の子クラスdataのみに注釈を付ける場合がありますが、注釈はコンストラクタで宣言されたプロパティのみを処理します。つまり、すべての親のプロパティを宣言してopenオーバーライドする必要があります。 open class Resource (open var id: Long = 0, open var location: String = "") data class Book ( override var id: Long = …

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 …

10
Pythonでは、メソッドをオーバーライドしていることをどのように示すのですか?
たとえば、Javaでは @Override注釈はオーバーライドのコンパイル時チェックを提供するだけでなく、優れた自己文書化コードを作成します。 私はドキュメントを探しているだけです(ただし、pylintのようなチェッカーへの指標である場合、それはおまけです)。コメントやdocstringをどこかに追加できますが、Pythonでオーバーライドを示す慣用的な方法は何ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.