在Python中从子类调用父类的方法?

在Python中创建简单对象层次结构时,我希望能够从派生类中调用父类的方法。 在Perl和Java中,这个(超级)有一个关键字。 在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, arg):
        return super(Foo, self).baz(arg)

Python也具有超级特性:

super (type[, object-or-type])

返回将方法调用委托给父类或同类类的代理对象。 这对于访问在类中被覆盖的继承方法很有用。 搜索顺序与getattr()使用的顺序相同,只是跳过了类型本身。

例:

class A(object):     # deriving from 'object' declares A as a 'new-style-class'
    def foo(self):
        print "foo"

class B(A):
    def foo(self):
        super(B, self).foo()   # calls 'A.foo()'

myB = B()
myB.foo()

ImmediateParentClass.frotz(self)

将会很好,直接父类是否定义了frotz本身或继承它。 super只是为了适当支持多重继承(然后它只适用于每个班级正确使用它的情况)。 在一般情况下, AnyClass.whatever是要查找whateverAnyClass的祖先如果AnyClass没有定义/覆盖它,而这个‘呼吁父母的方法子类’作为任何其它情况适用于真!

链接地址: http://www.djcxy.com/p/5093.html

上一篇: Call a parent class's method from child class in Python?

下一篇: What does 'super' do in Python?