一尘不染

Python-从子类调用父类的方法?

python

在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中的实际限制,我的理解上的空白还是两者都有?


阅读 339

收藏
2020-02-18

共1个答案

一尘不染

是的,但仅适用于新型类。使用super()功能:

class Foo(Bar):
    def baz(self, arg):
        return super(Foo, self).baz(arg)
对于Python 3.x,可以使用:

class Foo(Bar):
    def baz(self, arg):
        return super().baz(arg)
2020-02-18