在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的一个实际的限制,在我的理解或两者的差距?
Python中也有super:
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()
是的,使用super()功能:
class Foo(Bar):
def baz(self, arg):
return super(Foo, self).baz(arg)