[解決済み] Pythonの継承と__init__のオーバーライド
2022-06-12 23:36:19
質問
Dive Into Python」を読んでいて、クラスの章にこのような例があります。
class FileInfo(UserDict):
"store file metadata"
def __init__(self, filename=None):
UserDict.__init__(self)
self["name"] = filename
その後、著者は、もしあなたが
__init__
メソッドをオーバーライドしたい場合は、明示的に親メソッドである
__init__
を正しいパラメータで呼び出す必要があります。
-
もし、その
FileInfo
クラスが複数の祖先クラスを持っていたら?-
祖先クラスのすべてを明示的に呼び出す必要がありますか?
__init__
メソッドを呼び出す必要がありますか?
-
祖先クラスのすべてを明示的に呼び出す必要がありますか?
- また、オーバーライドしたい他のメソッドにもこの操作をしなければならないのでしょうか?
どのように解決するのですか?
この本は、サブクラスとスーパークラスの呼び出しに関して少し古いです。 また、組み込みクラスのサブクラス化に関しても少し古いです。
今となってはこんな感じです。
class FileInfo(dict):
"""store file metadata"""
def __init__(self, filename=None):
super(FileInfo, self).__init__()
self["name"] = filename
以下のことに注意してください。
-
のような組み込みクラスを直接サブクラス化することができます。
dict
,list
,tuple
など。 -
は
super
関数は、このクラスのスーパークラスを追跡し、それらの中の関数を適切に呼び出すことを処理します。
関連
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
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 カメの描画コマンドとその例
-
Python百行で韓服サークルの画像クロールを実現する
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み] __init__() は親クラスの __init__() を呼び出すべきですか?