子クラスに親のメソッドをオーバーライドさせる
2023-11-11 09:26:54
質問
以下のような未実装のメソッドを持つ基底クラスがあるとします。
class Polygon():
def __init__(self):
pass
def perimeter(self):
pass
def area(self):
pass
さて、私の同僚の一人がPolygonクラスを使って、次のようにサブクラスを作成したとします。
import math
class Circle(Polygon):
def __init__(self, radius):
self.radius = radius
def perimeter(self):
return 2 * math.pi * self.radius
(H/Sh)eはarea()メソッドを実装し忘れています。
サブクラスに親のarea()メソッドを強制的に実装させるにはどうしたらよいでしょうか。
どのように解決するのですか?
は、あなたの親クラスになる可能性があります。
class Polygon():
def __init__(self):
raise NotImplementedError
def perimeter(self):
raise NotImplementedError
def area(self):
raise NotImplementedError
のように、子クラスのインスタンスがこれらのメソッドを呼び出そうとしたときに、 実行時にのみ問題が発見されることになりますが。
別のバージョンでは
abc.abstractmethod
.
from abc import ABC, abstractmethod
import math
class Polygon(ABC):
@abstractmethod
def __init__(self):
pass
@abstractmethod
def perimeter(self):
pass
@abstractmethod
def area(self):
pass
class Circle(Polygon):
def __init__(self, radius):
self.radius = radius
def perimeter(self):
return 2 * math.pi * self.radius
# def area(self):
# return math.pi * self.radius**2
c = Circle(9.0)
# TypeError: Can't instantiate abstract class Circle
# with abstract methods area
をインスタンス化することはできません。
Circle
をインスタンス化することはできません。
これは
python 3
の構文です。
python 2
では
class Polygon(object):
__metaclass__ = ABCMeta
また、バイナリ特殊関数については
__eq__(), __lt__(), __add__(), ...
を使う方がよいでしょう。
return NotImplemented
を上げるのではなく
NotImplementedError
.
関連
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Pythonの静的メソッド?
-
[解決済み] インスタンスのクラス名を取得する?
-
[解決済み] EqualsメソッドがオーバーライドされたときにGetHashCodeをオーバーライドすることが重要な理由は何ですか?
-
[解決済み] Eclipseにプロジェクトをインポートした後に「Must Override a Superclass Method」エラーが発生する。
-
[解決済み] Pythonで子クラスから親クラスのメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] 派生クラス関数から親クラス関数を呼び出すには?
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] NotImplementedErrorを発生させずにNotImplementedを返す理由
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] PILからopenCVフォーマットへの変換
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] Python 言語を決定するには?
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複