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 の実際の制限ですか、私の理解のギャップですか、それともその両方ですか?
ベストアンサー1
使用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)