1. ホーム
  2. python

[解決済み] Pythonで子クラスから親クラスのメソッドを呼び出すにはどうすればよいですか?

2022-03-14 08:02:02

質問

Pythonで簡単なオブジェクト階層を作るとき、派生クラスから親クラスのメソッドを呼び出せるようにしたいのですが、どうすればいいですか? PerlやJavaでは、このためのキーワードがあります( super ). Perlでは、こんな感じかな。

package Foo;

sub frotz {
    return "Bamf";
}

package Bar;
@ISA = qw(Foo);

sub frotz {
   my $str = SUPER::frotz();
   return uc($str);
}

Pythonでは、子クラスから明示的に親クラスに名前を付けなければならないようです。 上の例では、次のようにする必要があります。 Foo::frotz() .

この動作は、深い階層を作ることを難しくするので、正しいとは思えません。 もし、継承したメソッドをどのクラスが定義したかを子供が知る必要がある場合、様々な情報苦痛が生じます。

これはpythonの実際の制限なのか、私の理解のギャップなのか、あるいはその両方なのでしょうか?

解決方法を教えてください。

を使用します。 super() 関数を使用します。

class Foo(Bar):
    def baz(self, **kwargs):
        return super().baz(**kwargs)

Python < 3 では、明示的にオプトインして 新スタイルのクラス を使用してください。

class Foo(Bar):
    def baz(self, arg):
        return super(Foo, self).baz(arg)