从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中的一个实际限制,还是我的理解上的空白,还是两者兼而有之?


SMILET
浏览 903回答 3
3回答

ABOUTYOU

是的,但只有在新型课程..使用super()职能:class Foo(Bar):     def baz(self, arg):         return super(Foo, self).baz(arg)对于Python3.x,可以使用:class Foo(Bar):     def baz(self, arg):         return super().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会往上看whatever在……里面AnyClass的祖先AnyClass不定义/重写它,这对于“子类调用父方法”和任何其他事件都是正确的!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python