[解決済み] Pythonにおける抽象クラスとインターフェースの違い
2022-03-17 02:28:24
質問
Pythonの抽象クラスとインターフェースの違いは何ですか?
どのように解決するのですか?
時々見かけるのは、以下のようなものです。
class Abstract1:
"""Some description that tells you it's abstract,
often listing the methods you're expected to supply."""
def aMethod(self):
raise NotImplementedError("Should have implemented this")
Pythonには正式なInterfaceの契約がない(そして必要ない)ので、Javaスタイルの抽象化とInterfaceの区別は存在しません。 もし誰かが正式なインターフェースを定義する努力を惜しまなければ、それは抽象クラスにもなります。 唯一の違いは、docstringに記載された意図の違いだけでしょう。
それに、アブストラクトとインターフェイスの違いは、ダックタイピングがあると毛嫌いされるんです。
Javaは多重継承ができないからインターフェイスを使う。
Pythonは多重継承なので、以下のようなものもあります。
class SomeAbstraction:
pass # lots of stuff - but missing something
class Mixin1:
def something(self):
pass # one implementation
class Mixin2:
def something(self):
pass # another
class Concrete1(SomeAbstraction, Mixin1):
pass
class Concrete2(SomeAbstraction, Mixin2):
pass
これは、一種の抽象的なスーパークラスを使用し、ミキシンを使用して、不連続な具体的なサブクラスを作成するものである。
関連
-
Python 入出力と高次代入の基礎知識
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
Pythonによるjieba分割ライブラリ
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み] スロットの使い方__?
-
[解決済み] ダックタイピングとは何ですか?
-
[解決済み] Pythonの拡張子.pyiの "i "は何を表すのですか?