[解決済み] Pythonで基底クラスのクラスメソッドを呼び出す
2022-08-16 17:50:43
質問
以下のコードを考えてみましょう。
class Base(object):
@classmethod
def do(cls, a):
print cls, a
class Derived(Base):
@classmethod
def do(cls, a):
print 'In derived!'
# Base.do(cls, a) -- can't pass `cls`
Base.do(a)
if __name__ == '__main__':
d = Derived()
d.do('hello')
> $ python play.py
> In derived!
> <class '__main__.Base'> msg
から
Derived.do
を呼び出すにはどうしたらよいでしょうか?
Base.do
?
私は通常
super
を使うか、あるいはこれが通常のオブジェクトメソッドであればベースクラス名を直接使うのですが、どうやらベースクラスでクラスメソッドを呼び出す方法が見つからないようです。
上の例では
Base.do(a)
が印刷されます。
Base
クラスの代わりに
Derived
クラスの代わりに
どのように解決するのですか?
新しいスタイルのクラス (すなわち
object
から派生したもの、または Python 3 では常に派生したもの) を使っている場合は、それを
super()
のようにします。
super(Derived, cls).do(a)
このように、ベースクラス版のメソッドにあるコードを呼び出すことになります(つまり
print cls, a
で、派生クラスから
cls
が派生クラスに設定されます。
関連
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] print()を使用してクラスのインスタンスを表示するには?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] 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で子クラスから親クラスのメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。