[解決済み】Pythonでは、メソッドをオーバーライドしていることを示すにはどうすればよいですか?
2022-04-09 11:39:44
質問
Javaでは、例えば
@Override
アノテーションは、オーバーライドをコンパイル時にチェックするだけでなく、優れたセルフ・ドキュメント・コードになります。
私はドキュメントを探しているだけです(pylintのような何らかのチェッカーへの指標になれば、それはボーナスなのですが)。私はどこかにコメントやdocstringを追加することができますが、Pythonでオーバーライドを示すための慣用的な方法は何でしょうか?
どのように解決するのですか?
これとfwc:さんの回答に基づいて、私はpipでインストール可能なパッケージを作りました。 https://github.com/mkorpela/overrides
時々、ここでこの質問を見てしまうことがあります。 主に、私たちのコードベースで(再び)同じバグを見た後に起こります。誰かが、インターフェイスのメソッドの名前を変更する際に、インターフェイスの実装クラスを忘れてしまったのです。
PythonはJavaではありませんが、Pythonにはパワーがあり、暗黙の了解より明示のほうがいいのです。
というわけで、オーバーライド・デコレーターのスケッチです。これは、パラメータとして与えられたクラスが、デコレートされるメソッドと同じメソッド(または何か)名を持っていることをチェックします。
もし、もっと良い解決策を思いついたら、ここに投稿してください。
def overrides(interface_class):
def overrider(method):
assert(method.__name__ in dir(interface_class))
return method
return overrider
以下のように動作します。
class MySuperInterface(object):
def my_method(self):
print 'hello world!'
class ConcreteImplementer(MySuperInterface):
@overrides(MySuperInterface)
def my_method(self):
print 'hello kitty!'
で、誤ったバージョンで実行すると、クラスのロード時にアサーションエラーが発生します。
class ConcreteFaultyImplementer(MySuperInterface):
@overrides(MySuperInterface)
def your_method(self):
print 'bye bye!'
>> AssertionError!!!!!!!
関連
-
Python関数の高度な応用を解説
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】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 string splicing.join()とsplitting.split()の説明
-
Python カメの描画コマンドとその例
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み】インターフェイスのメソッド実装は@Overrideすべきなのか?